web-dev-qa-db-ja.com

MSBuildを使用してv110プラットフォームツールセットをターゲットにする方法

私は、単一のVC++プロジェクトで構成される完全なVisual Studio 11ソリューションを作成し、最終的にMSBuildを使用してそれをコンパイルしようとするコマンドラインアプリケーションを開発しています。

私が直面している問題は奇妙です。

Visual Studio 11内でコマンドラインプログラムを実行すると機能します。代わりに開発環境の外で起動すると、エラーが発生します。

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(511,5): error MSB8008: Specified platform toolset (v110) is not installed or invalid. Please make sure that a supported PlatformToolset value is selected. [f:\ABC.vcxproj]

私が使用しているコマンドは次のとおりです。

C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe f:\snake\W9A30040.vcxproj /property:PlatformToolset=v110;Configuration=Debug /v:quiet

しかし、PlatformToolset = v110は無視され、MSBuildはv100(Visual Studio 2010)を使用していると感じています。

MSBuildにv110プラットフォームツールセット用にコンパイルするように指示する方法について何か提案はありますか?

20
Drake

この問題の回避策を見つけました。正式リリース前に解決されるVisual Studio 11 Betaの問題である可能性があります。

とにかく、興味がある場合は、MSBuild.exeを呼び出す前に、環境変数 "VisualStudioVersion"を "11.0"に設定するだけです。

バッチファイル

set VisualStudioVersion=11.0

またはVB.NET

Environment.SetEnvironmentVariable("VisualStudioVersion", "11.0")
9
Drake

VS 2012の完全リリースでも同じ問題に遭遇しました。受け入れられた回答で述べられているように環境変数を扱うのではなく、MSBuildでVisualStudioVersionをプロパティとして設定することもできます。例えば:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe .\myproject.vcxproj /p:VisualStudioVersion=11.0

環境変数のアプローチも同様に機能することは間違いありません。私は、環境変数を変更する必要がないようにしようとしていたので、正直にそれを試みませんでした。

25
Spencer

.SLNファイルの先頭が次のようになっていることを確認してください:

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012

ソリューションファイルをダブルクリックすると、読み込まれるVisual Studioのバージョンを制御するのは# Visual Studio 2012です(Windowsエクスプローラーに表示されるアイコンを制御します)。

ただし、MSBuildを実行すると、itFormat Version 12.00部分を調べます。

混乱していますか?

Visual Studio 2010がバージョン10.0で、Visual Studio 2012がバージョン11.0(12.0ではない)であり、バージョン12.0のソリューションファイル形式を使用すると、MSBuildがVisualStudioVersionを11.0に(暗黙的に)設定するため、これは混乱を招きます。

12
Roger Lipscombe

Visual Studio 2013以降、MSBuildはVisual Studioの一部になり、正しいパスは$(MSBuildToolsPath)(“ C:\ Program Files(x86)\ MSBuild\12.0\Bin”)になります。 .Netフレームワークフォルダー(「C:\ Windows\Microsoft.NET\Framework64\v4.0.30319」)からmsbuild.exeを使用すると、vs2012とvs2013のバージョンを区別できません。

3
ThieuND

これを行うには、メニューベースのオプションを使用します。 VC++ 2010 Expressから:-プロジェクトのメインファイルを右クリックします(ツリーの一番上のソリューション自体ではありません)。 -[一般]をクリックします。 -ダイアログの右側の上半分で、プラットフォームツールセットを見つけます。 -v110からv100に変更します。 -[OK]をクリックします。

-----完了------

1
DaveT

Microsoftは、すべてのEnvVarを設定するバッチファイルを提供しています。これは、[Microsoft Visual Studio 2012/Visual Studio Tools]の[スタート]メニューまたはVisual Studioフォルダー( "C:\ Program Files(x86)\ Microsoft Visual Studio 11.0\Common7\Tools\VsDevCmd.bat ")

0
Thomas Trotzki