Visual c++ 如何使用MSBuild以v110平台工具集为目标?

Visual c++ 如何使用MSBuild以v110平台工具集为目标?,visual-c++,msbuild,visual-studio-2012,Visual C++,Msbuild,Visual Studio 2012,我正在开发一个命令行应用程序,它创建一个完整的VisualStudio11解决方案,该解决方案由一个VC++项目组成,并尝试最终使用MSBuild对其进行编译 我面临的问题很奇怪 如果我在VisualStudio11中执行我的命令行程序,它就会工作;如果我在开发环境之外启动它,它会抛出错误: C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(511,5): e

我正在开发一个命令行应用程序,它创建一个完整的VisualStudio11解决方案,该解决方案由一个VC++项目组成,并尝试最终使用MSBuild对其进行编译

我面临的问题很奇怪

如果我在VisualStudio11中执行我的命令行程序,它就会工作;如果我在开发环境之外启动它,它会抛出错误:

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(VisualStudio2010)


您对如何告诉MSBuild编译v110平台工具集有什么建议吗?

我找到了解决此问题的方法;可能是VisualStudio11测试版的问题,将在正式发布前解决

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

在批处理文件中

set VisualStudioVersion=11.0
或者在VB.NET中

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

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

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


环境变量的方法我确信也能起作用,老实说,我没有尝试过,因为我试图避免修改环境变量。

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

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
双击解决方案文件时,由
#Visual Studio 2012
控制加载哪个版本的Visual Studio(并控制Windows资源管理器中显示的图标)

但是,当您运行
MSBuild
时,它会查看
格式版本12.00
部分

困惑的
这令人困惑,因为Visual Studio 2010是10.0版,Visual Studio 2012是11.0版(而不是12.0版),使用12.0版解决方案文件格式会导致MSBuild(隐式)将
VisualStudioVersion
设置为11.0。

使用基于菜单的选项执行此操作。从VC++2010 Express: -右键单击项目的主文件(而不是树顶部的解决方案本身)。 -单击“常规”。 -在对话框的右侧上半部分找到平台工具集。 -从v110更改为v100。 -单击“确定”


-----完成------

Microsoft提供了一个批处理文件来设置所有环境变量
您可以在“Microsoft Visual Studio 2012/Visual Studio工具”下的“开始”菜单或Visual Studio文件夹(“C:\Program Files(x86)\Microsoft Visual Studio 11.0\Common7\Tools\VsDevCmd.bat”)

从Visual Studio 2013开始,MSBuild现在是Visual Studio的一部分,正确的路径应该是$(MSBuildToolsPath)(“C:\Program Files(x86)\MSBuild\12.0\Bin”)。如果使用.Net framework文件夹中的MSBuild.exe(“C:\Windows\Microsoft.Net\Framework64\v4.0.30319”)它将无法区分vs2012和vs2013版本。

1:非常感谢,对我来说很有用,很好的提示。2:现在是什么?我完全糊涂了。跳过11.0-12.0的讨论,但是为什么$%§&2010-12转换器对我的sln文件没有任何影响?这是一个MSBuild问题吗?有关于这方面的文档吗?这个答案很好,实际上比其他的都好。为什么要更改MSBuild调用命令(它可能在多个项目之间共享),而不是更改有问题的项目?您知道如何在使用Visual Studio 2013时将MSBuild设置为
VisualStudioVersion
为12吗?如果您在VS2012中编辑解决方案,解决方案文件将更改,例如,添加和删除解决方案文件夹,然后保存。如果您不想手动更改该文件,也就是说。