2016-09-21 41 views
2

我有一个TFSBuild 2013服务器,我们现在试图建立UWP项目,但我们似乎无法使其使用正确的MSBuild版本。TFSBuild 2013无法更改msbuild版本

症状:

在构建UWP项目中,我们得到许多这样的错误: C:\ Program Files文件(x86)的\的MSBuild \微软\ VisualStudio的\ v14.0 \ AppxPackage \ Microsoft.AppXPackage。目标(283):在“'$(TargetPlatformVersion)'> = '10 .0.11000.0'”条件下,在“10.0.11000.0”上尝试进行数值比较,该比较评估为“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”设置,所以我不能这么做)。
  • 在每一个设置ToolsVersion =“14.0”的.csproj文件

无论我们怎么改变,我们不能生成代理使用14.0版本的MSBuild。

奇怪的是,nuget在执行包恢复时似乎找到了正确的版本。在运行nuget.exe restore命令时,我们在日志中看到了这一点:MSBuild自动检测:在'C:\ Program Files(x86)\ MSBuild \ 14.0 \ bin'中使用msbuild版本'14.0'。

但在日志中,所有的错误开始,我们看到这进一步下跌(注:错误的工具版本): C:\ Program Files文件(x86)的\的MSBuild \ 12.0 \ BIN \ MSBuild.exe/NOLOGO/noconsolelogger “C:\构建......” [SNIP]

任何帮助或建议感激地收到 - 我在我无计可施:)

+0

您是否可以在生成代理机器上手动构建MSBuild命令行项目?您是否指定了MSBuild参数/ p:AppxBundlePlatforms =“$(BuildPlatform)”/ p:AppxPackageDir =“$(Build.BinariesDirectory)\ AppxPackages \\”/ p:AppxBundle =总是在您的构建定义中? –

+0

是的,在服务器上使用VS2015构建解决方案可以正常工作。 – MercifulGiraffe

+0

如果我们可以强制TFSBuild始终使用MSBuild的14版本,我们会很高兴。我们可以强迫它以默认方式做到这一点吗? – MercifulGiraffe

回答

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版本获得了我们的构建,并且构建服务器的范围有限。