20

私は、単一のVC++プロジェクトで構成される完全なVisualStudio 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プラットフォームツールセット用にコンパイルするように指示する方法について何か提案はありますか?

4

6 に答える 6

25

VS 2012のフルリリースでも同じ問題が発生しました。受け入れられた回答に記載されているように環境変数を処理するのではなく、MSBuildでVisualStudioVersionをプロパティとして設定することもできます。例えば:

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

環境変数のアプローチ私も同じように機能すると確信しています。環境変数を変更する必要がないようにしようとしていたので、正直に言ってそれを試みませんでした。

于 2012-09-27T16:33:44.450 に答える
12

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

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

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

ただし、 を実行するとMSBuild、パーツが表示されますFormat Version 12.00

混乱している?

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

于 2013-06-18T10:09:33.807 に答える
9

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

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

バッチファイルで

set VisualStudioVersion=11.0

またはVB.NETで

Environment.SetEnvironmentVariable("VisualStudioVersion", "11.0")
于 2012-04-24T09:32:44.553 に答える
3

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 のバージョンを区別できません。

于 2014-11-28T06:27:14.027 に答える
1

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

- - - 終わり - - -

于 2013-09-11T22:28:06.107 に答える
0

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

于 2013-09-20T10:35:00.160 に答える