【问题标题】:How to use MSBuild to target v110 platform toolset?如何使用 MSBuild 瞄准 v110 平台工具集?
【发布时间】:2012-05-04 02:08:03
【问题描述】:

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

【问题讨论】:

    标签: visual-c++ msbuild visual-studio-2012


    【解决方案1】:

    我找到了解决此问题的方法;可能是 Visual Studio 11 Beta 的问题,将在正式发布之前解决。

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

    在批处理文件中

    set VisualStudioVersion=11.0
    

    或在 VB.NET 中

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

    【讨论】:

      【解决方案2】:

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

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

      我确信环境变量方法也同样有效,我真的没有尝试过,因为我试图避免修改环境变量。

      【讨论】:

        【解决方案3】:

        确保.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。

        【讨论】:

        • 1st:非常感谢,对我有用,很棒的提示。第二:whatinthewhatnow?我完全糊涂了。跳过 11.0-12.0 讨论,但为什么 $%§& 对我的 sln 文件没有任何作用?这在某种程度上是一个 MSBuild 问题吗?有这方面的文档吗?
        • 这个答案很棒,实际上比其他答案更好。为什么要更改 MSBuild 调用命令(可能在多个项目之间共享),而不是更改相关项目?
        • 你知道如何让MSBuild在使用Visual Studio 2013时将VisualStudioVersion设置为12吗?
        • 如果您在 VS2012 中编辑解决方案,解决方案文件将发生变化,例如。添加和删​​除解决方案文件夹,然后保存。如果您不想手动更改文件,那就是。
        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

            从 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 版本。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-05-20
              • 1970-01-01
              • 1970-01-01
              • 2016-01-14
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多