如何使razor view引擎使用c#6.0

如何使razor view引擎使用c#6.0,c#,asp.net,.net,asp.net-mvc,razor,C#,Asp.net,.net,Asp.net Mvc,Razor,目前,我的razor视图引擎抛出错误并说“请使用语言版本6或更高版本”。那可能只是resharper给了我一个指针。但如何让razor使用c#6.0呢。我的解决方案的其余部分在cs文件中,我可以使用所有新版本7的功能。如果您是从4.5.1项目运行此解决方案,升级到4.5.2可能会解决此问题 否则,建议安装此NuGet软件包以提供新功能:Microsoft.CodeDom.Providers.DotNetCompilerPlatform 这样做: <p>@Model.Person?.N

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

如果您是从
4.5.1
项目运行此解决方案,升级到
4.5.2
可能会解决此问题

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

这样做:

<p>@Model.Person?.Name</p>
<p>@(Model.Person?.Name)</p>
<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>
<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>
@Model.Person?.Name

可能有用。如果没有,请尝试这样明确:

<p>@Model.Person?.Name</p>
<p>@(Model.Person?.Name)</p>
<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>
<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>
@(Model.Person?.Name)


我认为这是由于当项目升级到较新版本的.net framework时,
web.config
的模板中存在错误造成的

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

<p>@Model.Person?.Name</p>
<p>@(Model.Person?.Name)</p>
<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>
<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>

关于RazorEngine模板中的enable C#6功能,我能找到的最佳分步说明如下:

这里没有提到的是,在将compilers部分添加到app.config时,确保版本号与您正在安装的软件包中的版本匹配。在评论中,它是1.0.3版,但我安装的软件包是1.0.4版,因此它需要如下所示:

<p>@Model.Person?.Name</p>
<p>@(Model.Person?.Name)</p>
<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>
<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>


其他答案都很好,但我发现了一篇好而短的文章,明确阐明了解决此问题的步骤:

简言之:

  • 在软件包管理器控制台中安装
    安装软件包Microsoft.CodeDom.Providers.DotNetCompilerPlatform

  • 选中A/在结尾处用以下行更改Web.config:

  • 
    
    可能重复的否-该解决方案没有解决此问题。必须安装Microsoft.Net.Compilers和Microsoft.CodeDom.Providers.DotNetCompilerPlatform才能工作(重新)安装上述两个软件包将此部分添加到.config文件中。是的,谢谢@Alen,我发现只要为Microsoft.CodeDom.Providers.DotNetCompilerPlatform安装Nuget pkg就足够了,因为Microsoft.Net.Compilers是一个依赖项。不再依赖Microsoft.Net.Compilers