コンパイルの方法は、CLRのサポートレベルに応じて複数あります。
1.混合 (/clr) | 2.純粋 (/clr:pure) | 3.安全 (/clr:safe) | ||
---|---|---|---|---|
.NET Framework クラス ライブラリ | ○ | ○ | ○ | |
CRT | ○ | ○ | × | |
MFC/ATL | ○ | × | × | |
アンマネージド | 関数 | ○ | × | × |
データ | ○ | ○ | × | |
関数から呼び出し | ○ | × | × | |
関数の呼び出し | ○ | Cスタイル関数のみ | P/Invokeのみ | |
リフレクション | DLLのみ | ○ | ○ |
C++/CLIには多くの制約があり、特に/clrではそれが多くなります。
プロジェクトが対象とする[.NET Framework 対象バージョン]はVisual Studio上のプロパティで確認できますが、変更はできません。これを変更するにはプロジェクトのファイル (.vcxproj) をエディタなどで開き、<TargetFrameworkVersion>の項目を手動で書き換えます。 .net - Change C++/CLI project to another framework than 4.0 with vs2010 - Stack Overflow ぼやきごと/2012-10-14/C++CLI:Visual Studio Express 2012 で .NET Framework 4.0 以前をターゲットにするには - ルーチェ's Homepage
<TargetFrameworkVersion>を変更したとき、それが<PlatformToolset>と矛盾すると「error LNK2022: メタデータの操作に失敗しました (80131195) : カスタム属性が適合しません」としてリンカエラーが発生します。visual studio 2010 - CLR/CLI linker fails with error LNK2022 - Custom attributes are not consistent - Stack Overflow
PlatformToolsetの値 ※1 | Visual Studioの製品名 | サポートされる.NETのバージョン |
---|---|---|
v90 | Visual Studio 2008 | 2.0、3.0、3.5 |
v100 | Visual Studio 2010 | 2.0~4.0 |
v110 | Visual Studio 2012 | 2.0~4.5.2 |
v120 | Visual Studio 2013 | 2.0~4.5.2 |
v140 | Visual Studio 2015 | 2.0~4.6 |
Visual Studio 2017 | 3.5~4.6.2 |