2017-09-26 109 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