20

我正在开发一个命令行应用程序,它创建由单个 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 平台工具集进行编译有什么建议吗?

4

6 回答 6

25

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

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(隐式)设置VisualStudioVersion为 11.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: - 右键单击​​项目的主文件(不是树顶部的解决方案本身)。- 单击常规。- 在对话框的右侧,上半部分找到平台工具集。- 从 v110 更改为 v100。- 单击确定。

- - - 完毕 - - -

于 2013-09-11T22:28:06.107 回答
0

Microsoft 提供了一个批处理文件来设置所有 EnvVars 您可以在“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 回答