通过Visual Studio 2015使用Visual Studio 2012工具进行编译

时间:2015-09-16 23:43:43

标签: visual-studio-2012 msbuild visual-studio-2015

我有很多开发人员目前正在使用Visual Studio 2012,我想分两个阶段将它们升级到2015。首先升级到Visual Studio 2015,然后升级到新的MSBuild(编译器)工具集。这很重要,因为我希望在Visual Studio中构建使用相同的工具集作为构建脚本中的构建,这些构建脚本可在开发人员计算机上使用并由构建服务器使用。我想避免挑选一天并告诉每个开发人员安装Visual Studio 2015,同时将更改集推送到我们的存储库/分支机构以一次更新构建脚本。

根据我的理解,项目文件中ToolsVersion attributeProject element驱动了MSBuild版本之间的区别。但是,在Visual Studio 2015中使用ToolsVersion = 4.0构建项目时,我收到以下消息:

  

使用工具版“14.0”构建。
  项目文件包含   ToolsVersion = “4.0”。此工具集可能未知或缺失,其中   您可以通过安装适当的方法解决此问题   MSBuild的版本,或者构建可能已被强制转换为特定版本   ToolsVersion出于政策原因。像对待项目那样对待项目   ToolsVersion = “14.0”。有关详细信息,请参阅   http://go.microsoft.com/fwlink/?LinkId=293424

除此之外,我可以按照构建输出看到它实际上是使用Visual Studio 2015工具集来编译代码。我知道“4.0”工具集不会丢失(我安装了Visual Studio 2012,以及包含该版本MSBuild的.NET Framework版本),所以我假设Visual Studio 2015无法找到它,或者那里是一个“政策原因”,我不明白。

根据Standard and Custom Toolset Configurations的MSDN页面,MSBuild 12.0(Visual Studio 2013)包含4.0工具集。但是我在MSBuild 14.0(Visual Studio 2015)上找不到任何信息。

是否可以在Visual Studio 2015中构建,但使用Visual Studio 2012工具集?如果是这样,怎么样?构建警告中提到的“政策原因”是什么?

1 个答案:

答案 0 :(得分:0)

解决方案

让开发人员将环境变量MSBUILDDEFAULTTOOLSVERSION设置为4.0。一种简单的方法是让它们在升级的PowerShell提示符下运行并运行:

[Environment]::SetEnvironmentVariable("MSBUILDDEFAULTTOOLSVERSION", "4.0", "Machine")

在获取此更改之前,需要重新打开Visual Studio。准备好升级到新的MSBuild工具集后,让开发人员删除该环境变量:

[Environment]::SetEnvironmentVariable("MSBUILDDEFAULTTOOLSVERSION", "4.0", "Machine")

背景

来自MSDN(强调我的):

  

从Visual Studio 2013开始,MSBuild Toolset版本就是   与Visual Studio版本号相同。 MSBuild默认为此   Visual Studio和命令行中的工具集,无论   项目文件中指定的工具集版本。这种行为可以   使用/ ToolsVersion标志覆盖。有关更多信息,请参阅   Overriding ToolsVersion Settings

顺便提一下,要验证计算机上可用的MSBuild工具集及其位置,您只需打开PowerShell并运行:

dir HKLM:\Software\Microsoft\MSBuild\ToolsVersions