Home / ぼやきごと / 2012-10-14
2012-10-14

C++CLI:Visual Studio Express 2012 で .NET Framework 4.0 以前をターゲットにするには

Visual Studio Express 2012 for Windows Desktop(以下VS2012)がMicrosoftから無償で提供されています。

従来のExpress版は言語別に提供されており、例えばC#とC++/CLIのプロジェクトを同一ソリューション内に混在させたりといったことができませんでした。
しかしVS2012は単一のアプリとして提供されており、そういったことも可能になっています。

さて、VS2012でC#やC++/CLIの新規プロジェクトを作成すると、既定では .NET Framework 4.5 がターゲットに設定されます。
しかしそれより古いバージョンの .NET Framework をターゲットとしたいこともあるでしょう。

C#の場合は、プロジェクトのプロパティから簡単に変更できます。

C#プロジェクトのプロパティ

しかしC++/CLIではプロジェクトのプロパティにそのような設定項目はありません。
プロジェクトファイル(*.vcxproj)を直接テキストエディタで開いて書き換える必要があります。

プロジェクトファイルをテキストエディタで開き、次のように書かれている行を探します。

<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>

この部分を目的の .NET Framework バージョンを表す文字列に書き換えます。
もし上述の行が見つからない場合は <PropertyGroup Label="Globals"> というタグの子要素として記述すればOKです。

文字列使われるバージョン
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>.NET Framework 4.5
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>.NET Framework 4.0
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
.NET Framework 4.0 Client Profile
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>.NET Framework 3.5
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
.NET Framework 3.5 Client Profile
<TargetFrameworkVersion>v3.0</TargetFrameworkVersion>.NET Framework 3.0
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>.NET Framework 2.0

ここまでやってプロジェクトを開き直せば、プロジェクトのプロパティの『共通プロパティ』で見られる『対象のフレームワーク』が目的のバージョンになっているはずです。

C++/CLIプロジェクトの共通プロパティ

そのままビルドすると問題なく通り、一見うまくいっているように見えます。
しかし .NET Framework のバージョンが 3.5 以下の場合、例えばこの手順で作成したクラスライブラリを他の 3.5 プロジェクトで参照しようとするとビルド時に怒られてしまいます。

これを解決するためには、C++/CLIプロジェクトのプロパティから『構成プロパティ』→『全般』を開き、『プラットフォームツールセット』の値を変更します。
コンボボックスを開くと4つの項目がありますが、「Visual Studio 2008 (v90)」を選択してください。(Debug, Release の両構成とも行う必要があります)

C++/CLIプロジェクトの構成プロパティ:プラットフォームツールセット

ここまで行えばVS2012のC++/CLIプロジェクトで .NET Framework 2.0 〜 3.5 をターゲットにしてビルドできるようになります。

本音を言えば .NET Framework のバージョンもプロジェクトのプロパティから変更できると嬉しいのですが、なぜそうなっていないのでしょうね?
Professional などの製品版なら変更できるのかもしれませんが。

Category: [C++][Visual Studio][プログラミング] - 2012-10-14 18:06:00