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.
我找到了解决这个问题的方法; 可能是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)
| 归档时间: |
|
| 查看次数: |
38525 次 |
| 最近记录: |