当前位置:  开发笔记 > 编程语言 > 正文

是否有一种简单的方法可以使Visual Studio 2015使用特定的ToolsVersion?

如何解决《是否有一种简单的方法可以使VisualStudio2015使用特定的ToolsVersion?》经验,为你挑选了1个好方法。

使用特定版本的msbuildI 构建项目或解决方案时,可以使用/toolsversion/tv切换选择较早的.net工具链:

"C:\Program Files (x86)\MSBuild\14.0\bin\msbuild" /tv:12.0 amazing.sln

根据以上内容正确选择适用于所有版本的Just Works msbuild和版本csc.exe等:

> "C:\Program Files (x86)\MSBuild\14.0\bin\msbuild" /tv:4.0 amazing.sln
...
CoreCompile:
  C:\Windows\Microsoft.NET\Framework\v4.0.30319\Csc.exe ...
...

> "C:\Program Files (x86)\MSBuild\14.0\bin\msbuild" /tv:12.0 amazing.sln
...
CoreCompile:
  C:\Program Files (x86)\MSBuild\12.0\bin\Csc.exe ...
...

如果我没有指定/tv,那么根据我正在使用的msbuild的版本和一些环境变量,我可能得到以下任何一个:

ToolsVersion在项目文件的顶级元素中指定

ToolsVersion对应于msbuild.exe我正在使用的版本

来自的价值 msbuild.exe.config

注册表中的值

(请参阅 MSDN上的Overriding ToolsVersion Settings页面的不同版本).

因此,为了在构建服务器和本地机器上具有一致结果的构建,我/tv在运行时使用msbuild.exe(事实上​​,这是在psake脚本中强制执行的,这也确保它使用相应的版本msbuild.exe).

但是,/tv在使用Visual Studio构建时,我无法使用该开关.相反,Visual Studio 2013及更高版本将使用该版本的Visual Studio附带的.net工具链,除非:

环境变量MSBUILDLEGACYDEFAULTTOOLSVERSION已设置并且 ......

...所有项目文件都将ToolsVersion属性设置为我想要使用的版本.

这是如此巴洛克式,我无法相信任何人实际上是这样做的.我的问题是这样的:

谁在做MSBUILDLEGACYDEFAULTTOOLSVERSION的事情吗?

如果没有,是否有另一种方法可以使Visual Studio使用特定的ToolsVersion,而不使用随ToolsVersion一起提供的Visual Studio版本?可以存储在版本控制中的东西(所以在项目或其他设置文件中)将是理想的.

最后:

我应该关心吗?鉴于C#编译器的每个连续版本都应该能够处理以前版本的输入,并且我可以在项目文件中设置目标.net框架和C#语言级别,这是否足以确保可重复的构建?

(我的偏见是我应该关心,因为:

我想在IDE和构建服务器上的构建是相同的(当然)

我希望能够使用VS2015(以及未来的版本),因为它比以前的版本更好的IDE,但我不想在我决定之前使用新的工具链.

也许我想要太多......)

有关此问题的具体示例,请参阅github上的msbuild-vs-vs2015-toolsversion存储库.


一些背景:我问这个是因为我们最近有一个CI构建错误,当我的一个同事提交了C#6.0代码,这些代码在他们的Visual Studio 2015副本上与Roslyn编译良好,但在CI中失败,因为使用了之前的版本.net工具链(他们使用了没有setter的自动属性,这在Roslyn中很好,但在早期版本中没有).我们将更新CI构建到Roslyn,但我想看看我们是否可以阻止将来发生这种事情.



1> Guy Bolton K..:

我通过编写Visual Studio扩展来解决这个问题,该扩展MSBUILDDEFAULTTOOLSVERSION在构建期间临时设置环境变量; 要使用的值是从与文件.toolsversion相同的目录中的.sln文件中读取的.psake脚本读取相同的.toolsversion文件并将值传递给/tv交换机.

可以在此处找到扩展的代码:https://github.com/guyboltonking/set-toolsversion-extension.可悲的是,我目前没有使用C++,或者确实使用Visual Studio,所以我无法为它提供任何支持(但我可以告诉你,我几个月没有任何问题地使用它).

感谢@efaruk提醒我存在的问题MSBUILDDEFAULTTOOLSVERSION.

编辑:感谢@ mbadawi23,现在可以使用VS2015和VS2017的扩展.

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有