当使用特定版本的msbuild
构建项目或解决方案时,我可以使用/toolsversion
或/tv
开关来选择早期的/toolsversion
工具链:
"C:\Program Files (x86)\MSBuild\14.0\bin\msbuild" /tv:12.0 amazing.sln
这只适用于所有版本的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的哪个版本和一些环境变量,我可能会得到以下任何一个:
msbuild.exe
版本相对应的msbuild.exe
msbuild.exe.config
的值(见 page on MSDN)。
因此,为了使构建服务器和本地机器上的构建结果一致,我在运行/tv
时使用msbuild.exe
(实际上,这是在psake
脚本中强制执行的,这也确保它使用相应的msbuild.exe
版本)。
但是,在使用Visual进行构建时不能使用/tv
开关。相反,Visual 2013及以上将使用该版本的Visual附带的.net工具链,除非
MSBUILDLEGACYDEFAULTTOOLSVERSION
被设置并且..。这是如此的巴洛克风格,我不敢相信有人真的在这样做。因此,我的问题是:
MSBUILDLEGACYDEFAULTTOOLSVERSION
的事吗?最后:
(我的偏见是,我应该关心,因为:
也许我想要太多.)
有关该问题的具体示例,请参阅我在github上的msbuild-vs-vs2015-toolsversion存储库。
一些背景:我这么问是因为最近我的一位同事提交了C# 6.0代码,这些代码在Visual 2015的副本上与.net一起编译,但是在CI中失败了,因为它使用了以前发布的.net工具链(他们使用了一个没有设置器的自动属性,这在罗斯林中很好,但在早期版本中不是这样)。我们将更新CI构建到罗斯林,但我想看看我们是否能够防止这种事情发生在未来。
发布于 2016-08-11 06:00:33
我编写了一个Visual扩展来解决这个问题,它在构建过程中临时设置了环境变量MSBUILDDEFAULTTOOLSVERSION
;要使用的值是从与.sln
文件相同的目录中的文件.toolsversion
中读取的。psake脚本读取相同的.toolsversion
文件,并将值传递给/tv
开关。
扩展的代码可以在这里找到:https://github.com/guyboltonking/set-toolsversion-extension。遗憾的是,我目前没有使用C++,也没有使用Visual,所以我不能为它提供任何支持(但我可以告诉您,我使用它时几个月没有任何问题)。
称赞@efaruk提醒我MSBUILDDEFAULTTOOLSVERSION
的存在。
编辑:由于@mbadawi23,现在可以在VS2015和VS2017中使用扩展。
发布于 2016-01-26 06:09:26
注意:您可以通过使用msbuild文件或自行更改项目来创建msbuild文件,并且可以有条件地决定工具版本(https://msdn.microsoft.com/en-us/library/7z253716.aspx) (.csproj也是一个具有不同扩展的结构化msbuild脚本,它也将与VS兼容)。
问候..。
编辑:
https://msdn.microsoft.com/en-us/library/bb383985.aspx
通过在解决方案中的项目上设置
$(ProjectToolsVersion)
属性。这使您可以使用与其他项目不同的工具集版本在解决方案中构建项目。
因此,我认为你已经得到了答案;)
发布于 2016-12-09 02:28:58
若要强制Visual 2015中的特定C#版本,您可以进入项目属性-> Build ->高级->语言版本。
如果将其设置为5,编译器将抱怨C# 6的特性有: Feature‘.’在C# 5中不可用。请使用语言版本6或更高版本。
Alternativly ReSharper也有一些这样的工具。
https://stackoverflow.com/questions/34065614
复制相似问题