我已经通过VisualStudio2019更新了我的ASP.NET Mvc 5 web应用程序以使用新的c# 8.0特性,在我尝试在Razor视图中使用这些新特性之前,一切都很好。
例如,如果我尝试使用新的开关表达式:
@{
ViewBag.Title = "About";
var foo = 1;
var bar = foo switch
{
1 => "one",
2 => "two",
_ => string.Empty
};
}
<h2>@ViewBag.Title.</h2>
<h3>@ViewBag.Message</h3>
<p>Use this area to provide additional information.</p>编译器不会抱怨,直到我试图到达页面,给我一个编译错误。

我怀疑必须更新Microsoft.CodeDom.Providers.DotNetCompilerPlatform,但似乎没有可用的更新。
Razor视图中是否有使用c# 8.0语言特性的方法?
发布于 2019-11-21 07:29:18
好的,有些事情需要先澄清。
根据this answer,C#语言版本与框架绑定,C# 8.0完全可用于所有支持.Net标准2.1的语言。.NET Framework4.7.2及以下版本不支持.NET标准2.1,今后也不会这样。
同时,如果在任何C#项目文件中指定LangVersion,则可以使用.csproj 8.0:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net48</TargetFrameworks>
<LangVersion>8.0</LangVersion>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>这将启用C# 8.0,并且一些不绑定的框架特性将提供给您。检查链接答案,知道是哪一个。
最后,为了回答我自己的问题,此时没有办法在Razor视图中使用Razor8.0的任何特性。运行时编译似乎是通过一个名为Microsoft.CodeDom.Providers.DotNetCompilerPlatform的包完成的,因此唯一的方法是更新该包以允许使用一些新特性。
一旦我得到更多的信息,我会更新这个答案。
发布于 2019-11-15 06:30:51
.net框架支持Razor 7.3,这就是为什么您无法使Razor工作的原因
.net核心3支持C# 8,我可以使用.net Core3MVC应用程序来实现您的示例。
你可以在这里看看:https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/configure-language-version
我希望以上各点有助:)
https://stackoverflow.com/questions/58751275
复制相似问题