TFSBuild 2013 无法更改 msbuild 版本
Posted
技术标签:
【中文标题】TFSBuild 2013 无法更改 msbuild 版本【英文标题】:TFSBuild 2013 unable to change msbuild version 【发布时间】:2017-01-29 03:40:40 【问题描述】:我有一个 TFSBuild 2013 服务器,我们现在正尝试使用它来构建 UWP 项目,但我们似乎无法让它使用正确的 MSBuild 版本。
症状:
在构建 UWP 项目时,我们会遇到很多这样的错误: C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\AppxPackage\Microsoft.AppXPackage.Targets (283):尝试对“10.0.11000.0”进行数值比较,结果改为“10.0.11000.0”一个数字,条件为“'$(TargetPlatformVersion)' >= '10.0.11000.0'”。
很多关于此错误的报告都告诉您确保 TFS Build 使用的是正确版本的 MSBuild。这就是问题所在。我们似乎无法让构建服务器使用正确的版本。
这是我们尝试过的(构建定义使用 TfvcTemplate.12.xaml 模板):
在构建服务器上安装 2015 构建工具(更新 3) 在构建服务器上安装 VS2015 (Yuck) 构建定义中的各种 MSBuild 参数组合。 (/tv:14.0 & /p:VisualStudioVersion=14.0) 包含 Microsoft.Net.Compilers nuget 包 编辑 TfvcTemplate.12.xaml 模板并设置“运行 MSBuild”步骤以将“ToolsVersion”设置为“14.0”。 (注意,这个版本的模板中没有“ToolsPath”设置,所以我不能这样做)。 在每个 .csproj 文件中设置 ToolsVersion="14.0"无论我们如何更改,我们都无法让 Build Agent 使用 14.0 版本的 MSBuild。
奇怪的是,nuget 在进行包还原时似乎找到了正确的版本。在日志中,我们在运行 nuget.exe 恢复命令时看到:MSBuild auto-detection: using msbuild version '14.0' from 'C:\Program Files (x86)\MSBuild\14.0\bin'。
但在日志的更下方,我们会看到所有错误开始的地方(注意:错误的工具版本): C:\Program Files (x86)\MSBuild\12.0\bin\MSBuild.exe /nologo /noconsolelogger "C:\Builds..." [SNIP]
任何帮助或建议都非常感谢 - 我无能为力:)
【问题讨论】:
您能否在您的构建代理机器上使用 MSBuild 命令行手动构建您的项目?您是否在构建定义中指定了 MSBuild 参数 /p:AppxBundlePlatforms="$(BuildPlatform)" /p:AppxPackageDir="$(Build.BinariesDirectory)\AppxPackages\\" /p:AppxBundle=Always? 是的,在服务器上使用 VS2015 构建解决方案工作正常。 如果我们可以强制 TFSBuild 始终使用 14 版本的 MSBuild,我们会很高兴。我们可以强制它默认这样做吗? 【参考方案1】:我最终放弃了尝试通过配置使其行为,但通过破解注册表设法使其在构建机器上运行。
我更改了以下注册表项:
HKLM\SOFTWARE\Wow6432Node\Microsoft\MSBuild\12.0\MSBuildOverrideTasksPath
HKLM\SOFTWARE\Wow6432Node\Microsoft\MSBuild\ToolsVersions\12.0\MSBuildToolsPath
在这两种情况下,我都更改了值
来自:
C:\Program Files (x86)\MSBuild\12.0\bin\
到:
C:\Program Files (x86)\MSBuild\14.0\bin\
免责声明:我不知道这会产生什么其他影响,但它使用正确的 MSBuild 版本进行构建,并且范围仅限于构建服务器。
【讨论】:
【参考方案2】:编辑 TfvcTemplate.12.xaml 模板并设置“运行 MSBuild”步骤以将“ToolsVersion”设置为“14.0”。
如果您还在 MSBuild 12.0 配置文件中添加以下部分,这将起作用(如 here 所述)
<msbuildToolsets>
<toolset toolsVersion="14.0">
<property name="MSBuildToolsPath" value="C:\Program Files (x86)\MSBuild\14.0\Bin\" />
</toolset>
</msbuildToolsets>
请注意在 MSbuild\bin 目录下还有 amd64 文件夹,它有自己的配置文件
【讨论】:
以上是关于TFSBuild 2013 无法更改 msbuild 版本的主要内容,如果未能解决你的问题,请参考以下文章