2016-08-31 100 views
10

我的公司有TFS 2013.
我有一個使用C#6.0功能的項目。
我的團隊無法直接訪問構建服務器。 VS2015尚未安裝,但管理服務器的人員正在尋求安裝2015版本的工具。即使使用Microsoft.Net.Compilers,C#6.0 build也會失敗TFS Build

與此同時,我已經安裝瞭如在C# 6.0 TFS Builds的答案中提及的Microsoft.Net.Compilers NuGet軟件包以及其他幾個問題。

溶液中的一些項目已經有安裝它:(一個Asp.Net MVC 5項目和一個Web API項目)

當解決方案建立,TFS使用Rosyln編譯器軟件包中的一些項目和其他人的默認編譯器。

  • 我已刪除並重新添加該軟件包。
  • 我試過在軟件包的版本1.0.0,1.1.0和1.3.2之間切換。
  • 我已經打開.csproj文件並排查找細微的差異。
  • 我從同一個項目中創建了多個解決方案和多個構建定義,以查看是否有某個組合導致了問題。
    • 其中一個項目總是使用默認編譯器構建,當一個構建的一部分和Roslyn編譯器構建爲另一個構建的一部分時。

兩個Web項目從未使用羅斯林編譯器。 還有3個其他庫,一個控制檯應用程序和一個包含單元/集成測試的手動項目。 隨着一個項目(庫之一),其行爲不同,這取決於建立它在,之外的所有項目似乎一致,這些編譯器,他們使用

缺少什麼我在這裏?爲什麼TFS可能會在某些項目中使用軟件包編譯器,但對其他項目卻不適

構建錯誤的抽樣: 使用nameof的:

SomeController.cs (53): The name 'nameof' does not exist in the current context 

一個靜態的使用:

RedactedTests.cs (5): Identifier expected; 'static' is a keyword 
RedactedTests.cs (5): Expected class, delegate, enum, interface, or struct 

空合併運算符:

InterestingClassName.cs (40): Invalid expression term '.' 
InterestingClassName.cs (40): Syntax error, ':' expected 
InterestingClassName.cs (40): Invalid expression term '.' 
InterestingClassName.cs (40): Syntax error, ':' expected 

表達濃郁屬性:

MyClass.cs (11): ; expected 
MyClass.cs (11): Method must have a return type 
MyClass.cs (11): Type expected 
+0

構建失敗時,您在日誌中獲得的詳細錯誤消息是什麼?此外,如果您在本地和構建代理機器上直接在VS中運行該C#6.0項目,那麼在兩種情況下都會得到相同的錯誤消息嗎? –

+0

@ Patrick-MSFT錯誤消息是語法錯誤消息,根據哪個C#6.0功能導致失敗而有所不同,但我將添加一些示例。 本地所有內容均在VS2015中生成。我的團隊無法直接訪問構建代理計算機以在此處運行它,並且2015工具尚未安裝。 –

+0

您是否在解決方案中的每個*項目上安裝了NuGet軟件包? - 它需要安裝在每個項目上。 – BrainSlugs83

回答

0

也許會使用.sln文件的版本,請注意,如果解決方案是使用目標版本。

Microsoft Visual Studio Solution File, Format Version 12.00 
# Visual Studio 14 
VisualStudioVersion = 14.0.25123.0 
MinimumVisualStudioVersion = 10.0.40219.1 

你可以試着改變它嗎?

+0

雙重檢查,所有解決方案具有相同的版本。如問題所示,同一解決方案中的不同項目可以使用默認編譯器或nuget軟件包編譯器構建。如果它依賴於解決方案版本,那麼似乎所有項目都可能使用nuget軟件包編譯器或全部使用默認版本構建。 –