コンパイラ

コンパイルの方法

コンパイルの方法は、CLRのサポートレベルに応じて複数あります。

  1. 共通言語ランタイム サポート (/clr)
  2. 純粋MSIL共通言語ランタイム サポート (/clr:pure)
  3. 安全なMSIL共通言語ランタイム サポート (/clr:safe)
各機能のサポートの相違
  1.混合 (/clr) 2.純粋 (/clr:pure) 3.安全 (/clr:safe)
.NET Framework クラス ライブラリ
CRT ×
MFC/ATL × ×
アンマネージド 関数 × ×
データ ×
関数から呼び出し × ×
関数の呼び出し Cスタイル関数のみ P/Invokeのみ
リフレクション DLLのみ
混合、純粋、および確認可能の各機能の比較 | MSDN

制約

C++/CLIには多くの制約があり、特に/clrではそれが多くなります。

/clrで使用できないコンパイラ オプション

-clr Restrictions | MSDN

対象とする.NET Frameworkのバージョンの変更

プロジェクトが対象とする[.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

PlatformToolsetとの矛盾

<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
※1 PlatformToolsetの値は、Visual Studioのバージョン番号に対応します。 PlatformToolset Property - MSBuild (Visual C++) Overview | MSDN
Microsoft Learnから検索