在ASP.NET MVC Core项目中使用View内部的C#7功能

Nic*_*cht 14 c# asp.net-core c#-7.0

我已经找到了与此相关的其他问题,但似乎没有一个我正在寻找的东西.

我有一个在ASP.NET Core上运行的网站,其中包含VS2017中的新项目结构.使用C#7功能的代码文件编译正常.但是,尝试在View中使用这些功能会导致一系列有关语法的错误.我尝试安装Roslyn以便在编译视图时使用它,因为我可以告诉我可以在Roslyn nuget包2.x及更高版本中使用C#7功能.但现在我得到明确说明的反馈

错误CS8059:功能'输出变量声明'在C#6中不可用.请使用语言版本7或更高版本.

在过去,我会检查web.config,但是在ASP.NET核心项目中没有web.config,而是根目录中的几乎空的,用于处理来自IIS的请求.

我如何表明我的视图应该用Roslyn编译,因为直到运行时才能完成?至少我认为这会解决我的问题.

编辑: 这个问题并不重复,正如我在开始时提到的那样,我也在寻找现有的问题.这是在编译时在您的应用程序中专门启用C#7功能,并且仅适用于ASP.NET应用程序.我正在使用ASP.NET Core,它没有web.config,其中定义了任何编译设置.另外,我正在尝试为在运行时编译的视图执行此操作,并且可能在不同的系统上.

解:

对于任何感兴趣的人,你必须将Roslyn添加到你的项目(我知道),但你还必须配置RazorViewEngineOptions使用CSharpParseOptions它来指示语言版本(默认为6).我做到了这一点,但我没有正确地做到这一点.我需要指定WithLanguageVersion()后退的结果ParseOptions来替换它们.

services.AddMvc().AddRazorOptions(options => options.ParseOptions = options.ParseOptions.WithLanguageVersion(LanguageVersion.CSharp7));
Run Code Online (Sandbox Code Playgroud)

Jul*_*eur 16

你可以尝试以下(由ASP.NET核心团队的人推荐):

  1. 安装Microsoft.CodeAnalysis.CSharp(版本2.0.0)和System.ValueTuple(版本4.3.0)包
  2. 在Startup.cs中,在ConfigureServices方法中,通过执行以下操作将Razor配置为使用C#7:

    services.AddMvc().AddRazorOptions(options =>
         options.ParseOptions = new CSharpParseOptions(LanguageVersion.CSharp7));
    
    Run Code Online (Sandbox Code Playgroud)

  • 注意:这在Microsoft.CodeAnalysis.CSharp v2.3.0/2.3.1([GitHub issue](https://github.com/dotnet/roslyn/issues/20873))中目前已被破坏.解决方法是使用v2.2.0. (2认同)