2017-09-26 108 views
5

要與Visual Studio 2017年使用新的C# 7.1 language features,您添加設置<LangVersion>latest</LangVersion>到您的項目文件(S)。使用C#7.1的MSBuild

然而,建立這樣的項目MSBuild中的錯誤(15.3.409.57025版本,位於C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin)結果:

CSC : error CS1617: Invalid option 'latest' for /langversion; 
must be ISO-1, ISO-2, Default or an integer in range 1 to 6. 

是這個功能只是尚未得到的MSBuild支持,或者是有可能得到這個加工?

這涵蓋了最初在Visual Studio 2013年和2015年創造了200多個不同的項目他們都被重新定位到.NET 4.7使用Target Framework Migrator工具(保存大量點擊,並出現 - 根據檢查。 csproj文件更改 - 正確完成這項工作)。

這些項目都從Visual Studio成功打造2017年

+0

你能分享你的csproj文件的內容嗎? –

+0

你的MSBuild駐留在哪裏?這裏它駐留在'C:\ Program Files文件(x86)\ Microsoft Visual Studio \ 2017 \ Professional \ MSBuild \ 15.0 \ Bin'中,並且添加語言元素的確行得通。您的項目是否從Visual Studio構建? –

+0

你可以顯示你的項目文件除外嗎? –

回答

0

我們發現,我們的MVC項目被觸發這個問題。

要解決,我們從版本1.0.0 使用這些項目Microsoft.CodeDom.Providers.DotNetCompilerPlatform NuGet包更新到1.0.7

0

我有使用C#7.1在這裏一個C#控制檯應用程序的解決方案。

使用VS 2017命令行(因此MSBuild 15.3.409.57025)它工作正常。 (該.csproj確實包含<LangVersion>latest</LangVersion>

Is this feature just not yet supported by MSBuild, or is it possible to get this working?

是的。

csc.exe實例正在運行的,什麼是它的版本?因爲它看起來像,儘管引用的版本,你有csc.exe版本錯誤(錯誤消息說1-6所以甚至沒有C#7將工作)。

+0

您提出的解決方案究竟是什麼?從OP的程序中所描述的那樣,它似乎一切正常。 –

+0

@Richard - 更新我的問題,以解決您的一些疑問 –

+1

@PatrickHofman更新說明我正在處理問題的存在性部分。 – Richard

6

添加對Microsoft.Net.Compilers包(2.3.x版,獲取C#7.1)的引用。

description of the package

Microsoft.Net.Compilers

This package not only includes the C# and Visual Basic compilers, it also modifies MSBuild targets so that the included compiler versions are used rather than any system-installed versions. Once installed, this package requires Microsoft Build Tools 2015.

+0

這爲我做了詭計。我在我的主項目中有這個包,但是今天我將一個引用的項目更新爲C#7.1,並忘記它沒有這個NuGet包。我收到了這個確切的問題 - 建立在VS中,但在構建服務器上失敗。 感謝您的提示! –

+1

其實......我的問題也是由我改變DEBUG項目屬性設置中的值引起的。訪問RELEASE設置發現它仍然是C#(最新的主要版本)。改變這一點,檢入並做另一個構建。現在開心 :) –

2

只要確保你在DebugRelease至少C# 7.1或更高的設定。把它設置爲最新的不是工作。 Microsoft.Net.Compilers nuget包不起作用,無需安裝。

還要確保您運行的是最新的MSBuild版本。

preview