2016-09-21 70 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版本獲得了我們的構建,並且構建服務器的範圍有限。