我有很多开发人员目前正在使用Visual Studio 2012,我想分两个阶段将它们升级到2015。首先升级到Visual Studio 2015,然后升级到新的MSBuild(编译器)工具集。这很重要,因为我希望在Visual Studio中构建使用相同的工具集作为构建脚本中的构建,这些构建脚本可在开发人员计算机上使用并由构建服务器使用。我想避免挑选一天并告诉每个开发人员安装Visual Studio 2015,同时将更改集推送到我们的存储库/分支机构以一次更新构建脚本。
根据我的理解,项目文件中ToolsVersion attribute的Project 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工具集?如果是这样,怎么样?构建警告中提到的“政策原因”是什么?
答案 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