如何在Razor视图中使用新的c#8.0功能

如何在Razor视图中使用新的c#8.0功能,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我已经通过Visual Studio 2019更新了我的ASP.NET Mvc 5 web应用程序,以使用新的c#8.0功能,在我尝试在Razor视图中使用这些新功能之前,一切正常 例如,如果我尝试使用新的开关表达式: @{ ViewBag.Title=“关于”; var-foo=1; var bar=foo开关 { 1=>“一个”, 2=>“两个”, _=>字符串。空 }; } @ViewBag.Title。 @查看包。留言 使用此区域可提供其他信息 编译器不会抱怨,直到我试图到达页面,给我

我已经通过Visual Studio 2019更新了我的ASP.NET Mvc 5 web应用程序,以使用新的c#8.0功能,在我尝试在Razor视图中使用这些新功能之前,一切正常

例如,如果我尝试使用新的开关表达式:

@{
ViewBag.Title=“关于”;
var-foo=1;
var bar=foo开关
{
1=>“一个”,
2=>“两个”,
_=>字符串。空
};
}
@ViewBag.Title。
@查看包。留言
使用此区域可提供其他信息

编译器不会抱怨,直到我试图到达页面,给我一个编译错误

我怀疑
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
必须更新,但似乎没有可用的更新

有没有办法在Razor视图中使用c#8.0语言功能?

.net framework支持c#7.3,这就是为什么不能让Razor视图正常工作的原因

.net core 3支持C#8,我能够让您的示例与.net core 3 MVC应用程序一起工作

您可以在这里查看:


我希望以上内容能有所帮助:)

好的,有一些事情需要首先澄清

根据C#的说法,语言版本与框架绑定,并且C#8.0完全可用于所有支持.Net标准2.1的语言。 .NET Framework 4.7.2及以下版本不支持.NET标准2.1,将来也不会支持

同时,如果在任何.csproj项目文件中指定LangVersion,有一种方法可以使用C#8.0:


网络48
8
使可能
这将启用C#8.0,您将可以使用一些非绑定框架功能。检查链接答案以了解哪一个

最后,我要回答我自己的问题,目前还没有办法在Razor视图中使用C#8.0的任何功能。运行时编译似乎是使用名为Microsoft.CodeDom.Providers.DotNetCompilerPlatform的包完成的,因此唯一的方法是更新该包以允许使用一些新功能


我将在获得更多信息后立即更新该答案。

这有帮助吗?-嗯,这正是我发现它可能与Microsoft.CodeDom.Providers.DotNetCompilerPlatform包有关的地方,但我无法使它适用于c#8.0,有些对我来说是可行的,-我将对Microsoft.CodeDom.Providers.DotNetCompilerPlatform的引用更新为版本#2.0.1(安装软件包Microsoft.CodeDom.Providers.DotNetCompilerPlatform-版本2.0.1)我刚刚又尝试了一次新的解决方案:使用.Net Framework创建一个默认mvc模板的新解决方案,编写一些c#8.0代码,visual studio询问我是否要更新我的项目以使用c#8.0,接受它,然后将相同的代码写入视图。它确实可以编译,但不会在运行时执行…在这个问题上运气好吗ng是真的。我可以在我的.net 4.7.2项目中使用C#8.0功能,只需在我的csproj中更改
LangVersion
。我甚至可以使用nullable功能。OP建议的代码编译和运行得很好。所以很有趣,为什么这对ASP.net应用程序不起作用。@ThomasHeijtink,查看最近的更新是一年r年前-2018年9月13日。因此,现在捆绑编译器不支持C#8功能。@ThomasHeijtink,您可以贡献自己的力量。我相信您只需要使用in:
3.3.1
的最新版本。您可以从源代码构建自己的nuget包并使用它(或者进行PR并获得反馈,希望将其合并到master中).有人尝试过分叉吗?我在GitHub上没有看到分叉(这增加了这一变化)。我的目标是逐渐将ASP.NET经典项目转换为core,而让一些代码卡在7.x上有点伤脑筋。