有没有办法在 VS 2013 上将平台工具集全局设置为 v110?

Is there a way to global set the platform toolset to v110 on VS 2013?

我一直在仔细阅读有关堆栈溢出的类似问题,但找不到对这个问题的具体或明确的足够答案:

我目前使用的是MSVS 2013 Ultimate,也单独下载了MS build tools 2013。我正在尝试安装一些 npm 模块,这些模块使用早期的 MSBuild 平台工具集进行编译,并且在按照 MSDN 上关于如何 Modify the Target Framework 到不同平台的说明进行操作后,这些模块也没有帮助我成功下载这些包。我目前的项目正在处理 javascript 并且我在不久的将来不会使用 visual studio,所以我目前在更改其配置设置方面非常灵活。

恐怕我将不得不求助于下载 VS 2012 来执行此操作,除非有人找到了明确的替代方案。

我目前 运行 Windows 8 Enterprise x64 上的所有内容。

在此先感谢您的帮助。

您可以使用 MsBuild 的 ImportBefore 扩展点:将 属性sheet 添加到

$(VCTargetsPath)\Platforms$(Platform)\ImportBefore

并向它们添加属性以强制 PlatformToolset 无论 vcproj 文件中的设置如何。与 VS2012 相比,使用 VS2013 做到这一点有点困难(我在那里使用这个技巧使用 v110_xp 工具集全局构建所有内容)但它仍然有效。

假设您在 64 位机器上并且想要覆盖 Win32 平台的所有 C++ 项目的设置,添加一个名为 override_platformtoolset.props 的 属性 sheet(名称不没关系,只要它以 .props 结尾)到目录 C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Platforms\Win32\ImportBefore\Default 内容如下:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <PlatformToolSet>v110</PlatformToolSet>
    <DefaultPlatformToolset>v110</DefaultPlatformToolset>
  </PropertyGroup>
  <Target Name="ShowOverrideInfo1" BeforeTargets="Build">
    <Message Text="Overriding PlatformToolset!" Importance="high"/>
  </Target>
</Project>

然后将另一个名为 override_platformtoolset 的文件添加到 C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Platforms\Win32\ImportBefore,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <PlatformToolSet>v110</PlatformToolSet>
    <ToolsetPropsFound>false</ToolsetPropsFound>
    <MinSupportedVCTargetsVersion>v110</MinSupportedVCTargetsVersion>
  </PropertyGroup>
  <Target Name="ShowOverrideInfo2" BeforeTargets="Build">
    <Message Text="Overriding PlatformToolset!" Importance="high"/>
  </Target>
</Project>

目标只是为了确保您将文件放在正确的位置:如果您现在构建,您应该会看到 Overriding PlatformToolset! 消息两次(并看到cl.exe 和 link.exe 从 C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin) 调用。否则有问题。

如果您想知道 how/why 这是否有效,请检查 C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.[= 中的 Microsoft.Cpp.Defaults.props 和 Microsoft.Cpp.props.props 39=].