在开发机和Jenkins服务器之间使用不同版本的MSBUILD.exe

3
我有一个使用VS2017开发的C#项目。
Jenkins服务器上没有安装VS,但开发计算机和服务器都安装了.NET 4.7。
在运行msbuild.exe /version命令时,我得到以下结果:
Microsoft (R) Build Engine版本号XXX(见下文)
开发计算机上有2个MSBUILD.exe:
1. C:...\MicrosoftVisualStudio\2017\Pro\MSBuild\15.0\Bin: 版本为15.1.1012.6693
2. C:\Windows\Microsoft.NET\Framework\v4.0.30319: 版本为4.7.2053.0
服务器上只有一个MSBUILD.exe:C:\Windows\Microsoft.NET\Framework\v4.0.30319: 版本为4.7.2053.0
我猜想在VS2017中构建项目时,它使用位于MicrosoftVisualStudio文件夹中的MSBUILD.exe。
现在我担心在Jenkins机器上使用不同版本的MSBUILD.exe会出问题。最好的方法是什么?将“C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild”文件夹复制到Jenkins计算机中吗?

无论您使用Visual Studio文件夹中的MsBuild.exe还是.Net框架中的MsBuild,只要可用解决依赖项即可。 - Suresh
2个回答

0

这取决于您使用的MSBuild功能。

在构建使用VS 2017开发的项目时,安全的方法是使用已安装的VS版本的MSBuild(15),可以从完整的VS安装或Visual Studio 2017 Build工具中获取。

即使.NET Framework版本的MSBuild能够构建许多项目,但它仅限于较旧的C#版本,因此您必须安装Microsoft.Net.Compilers NuGet包以替换编译器。但是,VS 2017还引入了新的MSBuild语法功能和构建任务,无法补丁到旧版的MSBuild中,因此强烈不建议使用旧版MSBuild。


谢谢。那你有什么推荐吗?如果我只复制VS2017中的msbuild文件夹,是否可行?或者我应该安装VS2017?我不能使用社区版,也不想为了jenkins购买第二个VS Pro许可证。 - vincedjango
我建议使用构建工具,它们是为此场景而设计的。 - Martin Ullrich

0

我在服务器上使用此版本的MSBUILD.exe时遇到了几个错误:C:\Windows\Microsoft.NET\Framework\v4.0.30319: 4.7.2053.0

以下是构建VS2017 C#项目并在Jenkins 2.60.2上成功的步骤:

  1. 将C:...\MicrosoftVisualStudio\2017\Pro\MSBuild复制到我的服务器上
  2. 在Jenkins/全局工具配置中,在MSBUILD部分

    • 名称:msbuild.exe
    • MSBuild路径:C:\MSBuild\15.0\Bin
    • 默认参数:-p:FrameworkPathOverride="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.7"

如果默认参数为空,我会遇到错误,因此这很重要。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接