在ASP.NET MVC Core项目中使用View内部的C#7function
我已经找到了与此相关的其他问题,但似乎没有一个我正在寻找的东西。
我有一个在ASP.NET Core上运行的网站,其中包含VS2017中的新项目结构。 使用C#7的代码文件function编译正常。 但是,尝试在View中使用这些function会导致一系列有关语法的错误。 我尝试安装Roslyn以便在编译视图时使用它,因为我可以告诉我,Roslyn nuget包2.x及更高版本中提供了C#7function。 但现在我得到明确说明的反馈
错误CS8059:C#6中没有function’输出变量声明’。请使用语言版本7或更高版本。
在过去,我会检查web.config,但是在ASP.NET核心项目中没有web.config,而是根目录中的几乎空的,用于处理来自IIS的请求。
我如何表明我的视图应该用Roslyn编译,因为直到运行时才能完成? 至少我认为这会解决我的问题。
编辑:这个问题与此不重复,正如我在开始时提到的那样,我也在寻找现有的问题。 这是在编译时在您的应用程序中专门启用C#7function,并且仅适用于ASP.NET应用程序。 我正在使用ASP.NET Core,它没有web.config,其中定义了任何编译设置。 另外,我正在尝试为在运行时编译的视图执行此操作,并且可能在不同的系统上。
解:
对于任何感兴趣的人,您必须将Roslyn添加到您的项目中(我知道),但您还必须配置RazorViewEngineOptions
以使用指示语言版本的CSharpParseOptions
(默认值为6)。 我做过这个,但我做得不对。 我需要将WithLanguageVersion()
的结果分配回ParseOptions
以替换它们。
services.AddMvc().AddRazorOptions(options => options.ParseOptions = options.ParseOptions.WithLanguageVersion(LanguageVersion.CSharp7));
你可以尝试以下(由ASP.NET核心团队的人推荐):
- 安装Microsoft.CodeAnalysis.CSharp(版本2.0.0)和System.ValueTuple(版本4.3.0)包
-
在Startup.cs中,在ConfigureServices方法中,通过执行以下操作将Razor配置为使用C#7:
services.AddMvc().AddRazorOptions(options => options.ParseOptions = new CSharpParseOptions(LanguageVersion.CSharp7));
所以我发现有一些编译选项暴露出你在ConfigureServices()
调用中调用call。
public void ConfigureServices(IServiceCollection services) { // Add framework services. services.AddMvc().AddRazorOptions(x => x.ParseOptions.WithLanguageVersion(LanguageVersion.CSharp7)); }
如果你不添加Roslyn,问题是LanguageVersion.CSharp7
会出错。 所以我认为这是必要的。
添加Roslyn之后,一切都编译得很好,但视图仍然会出错。
@{ //My view code string s = "1"; int.TryParse(s, out int i); }
因此,如果MVC公开了一个可用于指定语言版本的RazorOptions,为什么它不被尊重?
- 在ASP.NET Core Web API中接收文件和其他表单数据(基于边界的请求解析)
- .net核心石英dependency injection
- ASP.NET Core错误:实施忘记密码时出现无效令牌错误
- ASP.NET Core是否支持RESTful Web API的JSON Web签名?
- 有没有什么好的理由不在核心MVC中使用ViewComponent而不是Partial View?
- Aspnet核心十进制绑定不适用于非英语文化
- ASP.NET Core Identity不会注入UserManager
- 将httpHandler附加到httpclientFactory webapi aspnetcore 2.1
- 在Asp.net Core中设置CultureInfo有一个。 作为CurrencyDecimalSeparator而不是,