【发布时间】:2017-02-01 15:21:55
【问题描述】:
我有一个构建项目的 MSBUILD 脚本(.bat 文件)。我需要将在本地执行的 MSBuild 脚本(在提交到 repo 之前)在与我们的构建管理和持续集成服务器匹配的特定版本的 MSBuild 上运行。 问题是当前已安装所有本地开发人员框:
C:\Windows\Microsoft.NET\Framework\v3.5
C:\Windows\Microsoft.NET\Framework\v4.0.30319
C:\Program Files (x86)\MSBuild\14.0
所以他们在本地机器上运行我的构建脚本:
msbuild MyProject.HelloWorld.proj
问题在于它使用 Windows 路径环境变量中列出的最高 MSBuild 版本进行构建。
我可以知道我们的构建日志使用了哪个版本的 MSBuild。
我尝试通过修改脚本以传递 Toolsversion 参数来指定 tools version:
msbuild /toolsversion:14.0 MyProject.HelloWorld.proj
但无济于事,该项目是使用 MSBuild 4.0 版构建的。
我可以要求所有开发人员修改他们的环境路径变量的顺序并将 C:\Program Files (x86)\MSBuild\14.0 放在顶部,这将导致它使用 MSBuild 14 构建,但我是寻找一种不那么突兀的方式来完成任务。
此外,还有其他项目需要使用旧版本的 MSBuild 构建,因此根据项目的不同,他们可能需要移动路径变量的顺序,这是我试图避免的。
【问题讨论】:
-
只需使用完整路径,因为它们在机器上是相同的。如果您确实想使用更好的逻辑,MSBuild 有自己的注册表项来帮助组织更多与版本相关的信息。
-
没有一个 msbuild.exe 版本属于 PATH。您几乎无法阻止开发人员将其搞砸以达到自己的目的,或者使用错误的开发人员命令提示符,如果是 .bat 文件,请考虑提供给他们。
-
@LexLi 好主意。随时提交作为答案。我可能会根据收到的其他答案将其标记为答案。
-
@HansPassant 该脚本当前确实是一个.bat,这如何使上述具体情况变得更好?
-
键入您要运行的 .exe 文件的全名,这样您就不必依赖 PATH。
标签: .net msbuild msbuild-4.0