将C#7.1与MSBuild一起使用

Ric*_*ett 24 c# msbuild visual-studio-2017 c#-7.1

要在Visual Studio 2017中使用新的C#7.1语言功能,请将设置添加<LangVersion>latest</LangVersion>到项目文件中.

但是,从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.
Run Code Online (Sandbox Code Playgroud)

MSBuild尚未支持此功能,还是可以实现此功能?

这包括最初在Visual Studio 2013和2015中创建的200多个项目.它们都使用Target Framework Migrator工具重新定位到.NET 4.7 (它保存了大量点击并显示 - 基于检查.csproj文件更改 -正确地完成工作).

这些项目都是从Visual Studio 2017成功构建的.

Dom*_*nas 23

Nuget包

  • Microsoft.Net.Compilersnuget包不起作用,不需要安装.

设置以下内容 project/build settings

  • C# 7.1Debug Release构建属性中至少设置或更高.(通过:项目菜单> [ProjectName]属性>构建选项卡> [高级]按钮>语言版本).

  • 将其设置为最新并没有工作.

预习

还要确保您运行的是最新的MSBuild版本.

  • 答对了!这是我使用TFS和MSBuild的正确答案. (2认同)

Jul*_*eur 7

添加对Microsoft.Net.Compilers包的引用(版本2.3.x,以获取C#7.1).

包装的简短描述:

Microsoft.Net.Compilers

该软件包不仅包括C#和Visual Basic编译器,还修改MSBuild目标,以便使用包含的编译器版本而不是任何系统安装的版本.安装后,此程序包需要Microsoft Build Tools 2015.

  • 实际上......我的问题也是由于我更改了DEBUG项目属性设置中的值.访问RELEASE设置发现它仍然是C#(最新的主要版本).更改,签入和执行另一个构建.现在开心 :) (5认同)

Ric*_*ett 2

我们发现我们的 MVC 项目触发了这个问题。

为了解决这个问题,我们将Microsoft.CodeDom.Providers.DotNetCompilerPlatform这些项目使用的 NuGet 包从版本1.0.0更新到1.0.7

  • 除此之外,我还必须更新“Microsoft.Net.Compilers”。 (2认同)