私は、C++/CLI と C# プロジェクトをうまく組み合わせた VS 2010 ソリューションを持っています。さらなる開発のために VS 2012 に移行することにしました。技術的な問題により、C++/CLI プロジェクトをアップグレードできません。これは私にいくつかの問題を引き起こしました。devenvコマンドを使用して上記のソリューションをコンパイルする夜間のビルド スクリプトがあります。すべての C++/CLI プロジェクトがコンパイルに失敗します。
IDE がトリガーされると、すぐにすべてのプロジェクトを変換するよう求められます。いいえと言ってコンパイルすると、すべてうまくいきます。
私の調査:
実際に何が起こっているのかを理解するために、次のアプローチを試しました。MSBUILD ログの詳細度も増加しました。すべてのケースで、VS 2012 コマンド プロンプトが使用されました。
ケース 1:
msbuild {C++/CLI プロジェクト名} /t:rebuild
結果:
プロジェクトは正常にコンパイルされ、VS 2010 コンパイラを使用します。ログの次の行は、次のことを示しています。
「AlwaysCreate」が指定されていたため、「x64\Debug\Swift.Algorithms.unsuccessfulbuild」を作成しています。ClCompile: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\x86_amd64\CL.exe
ケース 2:
devenv {C++/CLI プロジェクト名} /rebuild "{CONFIGURATION}"
結果:
プロジェクトは正常にコンパイルされ、VS 2010 コンパイラを使用します。ログの次の行は、次のことを示しています。
1>アセンブリ「Microsoft.Build.CppTasks.x64、Version=4.0.0.0、Culture=neutral、PublicKeyToken=b03f5f7f11d50a3a」から「CL」タスクを使用。1>タスク "CL" 1> ツールに渡される環境変数: 1>
VS_UNICODE_OUTPUT=1512 1> C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\x86_amd64\CL.exe
ケース 3: (私を苛立たせるもの)
devenv {ソリューション ファイル名} /rebuild "{CONFIGURATION}"
C++/CLI プロジェクトがコンパイルに失敗します。C# プロジェクトは正常にコンパイルされます。この場合に使用されている C++ コンパイラは VS 2012 バージョンです。ログの次の行は、次のことを示しています。
1> ツールに渡される環境変数: 1> VS_UNICODE_OUTPUT=1016 1> C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\BIN\x86_amd64\CL.exe /c
質問:
1) プロジェクト ファイルが個別にコンパイルに使用されている場合、MSBUILD は適切なツールを使用するのに十分賢いことがわかります。どの VS ツール コマンド プロンプト (VS 2010 または VS 2012) を使用するかは問題ではありません。ソリューション ファイルが呼び出されたときに何が問題になっていますか?
2) 私の製品をコンパイルする唯一の方法は、ソリューション ファイルが問題を引き起こしているため、各プロジェクトを個別にコンパイルすることだと思います。これは既知の制限ですか?
この件についてご意見をいただければ幸いです。