2015-11-05 56 views
3

由於Roslyn編譯器中存在一個錯誤,我無法使用編譯器的v1.0構建我的項目(沒有解決方法使它在1.0上工作)。但是,Microsoft已在更新版本的編譯器中更正了此問題。在TeamCity中使用特定的Roslyn編譯器版本

使用Visual Studio時,可以使用特定版本的編譯器,將可從https://www.nuget.org/packages/Microsoft.Net.Compilers/獲得的NuGet包添加到項目中。這會使Visual Studio在構建項目時使用指定版本的編譯器。

但是,當試圖在TeamCity上運行構建時,似乎並不知道要使用新版本的編譯器。它只允許選擇使用哪個版本的Visual Studio。有什麼方法可以指定TeamCity手動使用哪個版本的編譯器?

注:我使用的TeamCity專業9.1.3(建37176),並在構建步驟我選擇的Visual Studio 2015年

當本地製造,構建用做:

D:\BitBucket\LocalPackages\Microsoft.Net.Compilers.1.1.0-beta1-20150928-02\build\..\tools\csc.exe /noconfig /nowarn:1701,1702,2008 .... 

但是當TeamCity的建成,日誌顯示:

[Csc] C:\Program Files (x86)\MSBuild\14.0\bin\csc.exe /noconfig /nowarn:1701,1702 ..... 

我人因此證實了該程序包爲TeamCity的構建的一部分(前csc命令)安裝:

[Exec] Installing 'Microsoft.Net.Compilers 1.1.0-beta1-20150928-02'. 

這是剛剛的的NuGet如何表現不同,在Visual Studio界面與命令行的症狀?如果是這樣,是否有解決方法?

更新: 我從來沒有弄明白。在構建服務器上運行Visual Studio中的構建運行良好,但通過TeamCity使用完全相同的文件運行構建不起作用。

但是,微軟發佈了VS2015 Update 1,它解決了我原來的問題,但沒有解決這個問題。

+0

當您從命令行運行nuget時,您並未安裝軟件包,而是將其恢復。所以注入的道具文件已經在csproj中。你可以嘗試從TeamCity命令行任務運行msbuild嗎?也許它默認注入一些其他屬性。另外,你可以發佈一個詳細的生成輸出嗎?你也可以嘗試在構建代理上自己做一個msbuild,然後檢查它是否提取了正確的csc版本。 – Tamas

回答

0

Microsoft.Net.Compilers包使用的是標準的Nuget工具。具體來說,包中有一個build文件夾,其中包含一個道具文件。這個道具文件被注入到csproj文件中,並負責將csc可執行文件更改爲包中的文件。

如果您使用的是msbuild 14,則.props文件正在更改CscToolPath,而CscToolExe指向包中的csc.exe。所以你只需要確保TeamCity使用msbuild 14.

你使用的是哪個版本的TeamCity? 9.1的文檔說它支持msbuild 14(msbuild 2015)。如果你使用的是舊版本,你仍然可以在命令行中使用msbuild 14。

相關問題