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 版本的主要内容,如果未能解决你的问题,请参考以下文章

TFSBuild - 数据库部署 - 存在文件锁定冲突

TFS Build 2013 避免代码分析

TFSBuild/MSBuild 和项目参考与文件参考

tfsbuild - TFS 构建定义 - 要部署的默认 Web 应用程序

如何在 Rider 中触发文件更改的设计时构建?

仅当 tfs build 中的版本更改时 npm publish