如何使剃刀视图引擎使用c# 6.0

Posted

技术标签:

【中文标题】如何使剃刀视图引擎使用c# 6.0【英文标题】:How to make razor view engine to use c# 6.0 【发布时间】:2015-10-19 18:43:35 【问题描述】:

目前我的 razor 视图引擎抛出错误并显示“请使用语言版本 6 或更高版本”。这可能只是给我一个指针。但是我如何让剃须刀使用 c# 6.0.我在 cs 文件中的其余解决方案可以使用所有新版本 7 的功能。

【问题讨论】:

C# 6.0 Features Not Working with Visual Studio 2015 的可能重复项 否 - 该解决方案无法解决此问题。 【参考方案1】:

我认为这是由于项目升级到 .net 框架的较新版本时 web.config 的模板中的错误所致。

我可以通过进入 web.config,找到 system.codedom 节点并将内容更改为如下所示来解决此问题:

<compilers>
  <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
  <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
</compilers>

【讨论】:

Microsoft.Net.Compilers 和 Microsoft.CodeDom.Providers.DotNetCompilerPlatform 必须安装才能工作 (重新)安装以上两个包会将此部分添加到.config文件中。 是的,谢谢@Alen,我发现只需为 Microsoft.CodeDom.Providers.DotNetCompilerPlatform 安装 Nuget pkg 就足够了,因为 Microsoft.Net.Compilers 是一个依赖项。 DotNetCompilerPlatform v3.6.0 不再依赖于Microsoft.Net.Compilers【参考方案2】:

如果您从 4.5.1 项目运行此程序,升级到 4.5.2 可能会解决此问题。

否则,建议安装此 NuGet 包以提供新功能:Microsoft.CodeDom.Providers.DotNetCompilerPlatform

所以做这样的事情:

<p>@Model.Person?.Name</p>

可能会奏效。如果没有,请尝试像这样明确:

<p>@(Model.Person?.Name)</p>

【讨论】:

【参考方案3】:

其他答案都很好,但我找到了一篇很好且简短的文章,明确阐明了此问题的步骤:https://cpratt.co/using-csharp-6-or-7-with-mvc-5/

简而言之:

    在包管理器控制台中安装Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

    检查/更改您的 Web.config,并在末尾添加以下几行:

<system.codedom>
  <compilers>
    <compiler language="c#;cs;csharp"
      extension=".cs"
      type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
      warningLevel="4"
      compilerOptions="/langversion:7 /nowarn:1659;1699;1701" />
    <compiler language="vb;vbs;visualbasic;vbscript"
      extension=".vb"
      type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
      warningLevel="4"
      compilerOptions="/langversion:15 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
  </compilers>
</system.codedom>

【讨论】:

【参考方案4】:

我能找到的在 RazorEngine 模板中启用 C# 6 功能的最佳分步说明如下:https://github.com/Antaris/RazorEngine/issues/363#issuecomment-273106183

其中没有提到的是确保将编译器部分添加到您的 app.config 时,版本号与您正在安装的软件包中的版本相匹配。在评论中它是 1.0.3 版本,但我安装的包是 1.0.4,所以它需要看起来像这样:

<system.codedom>
<compilers>
  <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
</compilers>

【讨论】:

以上是关于如何使剃刀视图引擎使用c# 6.0的主要内容,如果未能解决你的问题,请参考以下文章

如何在自定义剃刀视图引擎中使用相对虚拟路径

如何对剃刀视图进行单元测试

使用 Aspx 页面作为剃刀视图的局部视图

如何在剃刀中使用三元运算符(特别是在 HTML 属性上)?

如何将值从javascript变量传递给剃刀变量?

如何使用剃刀视图 ASP .Net Core 从 JWT 声明角色