如何使用MSBuild定位v110平台工具集?

Dra*_*ake 20 msbuild visual-c++ visual-studio-2012

我正在开发一个命令行应用程序,它创建一个完整的Visual Studio 11解决方案,由单个VC++项目组成,并尝试使用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]
Run Code Online (Sandbox Code Playgroud)

我正在使用的命令如下:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe f:\snake\W9A30040.vcxproj /property:PlatformToolset=v110;Configuration=Debug /v:quiet
Run Code Online (Sandbox Code Playgroud)

但我觉得PlatformToolset = v110被忽略,MSBuild使用v100(Visual Studio 2010).

您对如何告诉MSBuild编译v110 Platform Toolset有什么建议吗?

小智 25

我在VS 2012的完整版本中遇到了同样的问题.您还可以将VisualStudioVersion设置为MSBuild的属性,而不是处理接受的答案中提到的环境变量.例如:

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

环境变量的方法我肯定也工作,我老实说没有尝试,因为我试图远离不必修改环境变量.


Rog*_*mbe 12

确保.SLN文件顶部如下所示:

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
Run Code Online (Sandbox Code Playgroud)

双击解决方案文件时,它# 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(隐式)设置VisualStudioVersion为11.0.


Dra*_*ake 9

我找到了解决这个问题的方法; 可能是Visual Studio 11 Beta的问题,将在官方发布之前解决.

无论如何,如果您有兴趣,只需在调用MSBuild.exe之前将环境变量"VisualStudioVersion"设置为"11.0"即可.

在批处理文件中

set VisualStudioVersion=11.0
Run Code Online (Sandbox Code Playgroud)

或者在VB.NET中

Environment.SetEnvironmentVariable("VisualStudioVersion", "11.0")
Run Code Online (Sandbox Code Playgroud)