2015-09-16 176 views
5

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

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

使用工具版本“14.0”进行构建。工程文件包含 ToolsVersion =“4.0”。此工具集可能未知或缺失,其中 可能通过安装适当的 版本的MSBuild来解决此问题,或者出于策略原因可能已强制构建特定的工具版本。对项目进行处理,就好像它有 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

解决方案

有你的开发环境变量MSBUILDDEFAULTTOOLSVERSION设置为4.0。一个简单的方法来做到这一点是让他们运行打开提升的PowerShell提示符并运行:

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

Visual Studio将需要重新打开的时候,才拿起这种变化。一旦你准备好升级到新的MSBuild工具集,让您的开发人员删除环境变量:

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

背景

MSDN(重点煤矿):

开始在Visual Studio 2013 ,MSBuild工具集版本是与Visual Studio版本号相同的 。在Visual Studio和命令行中,MSBuild的默认设置为 工具集而不管 在项目文件中指定的工具集版本。此行为可以通过使用/ ToolsVersion标志覆盖 。有关更多信息,请参阅 Overriding ToolsVersion Settings

顺便说一下,以确认其的MSBuild工具集可在机器上和它们所在的位置,你可以打开PowerShell和运行:

dir HKLM:\Software\Microsoft\MSBuild\ToolsVersions