How to make razor view engine to use c# 6.0

2019-03-22 13:19发布

Currently my razor view engine throws and error saying "Please use language version 6 or higher". That may just be resharper giving me a pointer. But how do i make razor use c# 6.0. Rest of my solution in the cs files i can use all the new version 7 features.

4条回答
一夜七次
2楼-- · 2019-03-22 13:46

I believe this is due to a bug in the templates for web.config when the project is upgraded to a newer version of the .net framework.

I was able to fix this by going in to web.config, finding the system.codedom node, and changing the content to look like this:

<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>
查看更多
不美不萌又怎样
3楼-- · 2019-03-22 13:54

The best step-by-step instructions I could find for enable C# 6 features in RazorEngine templates is here: https://github.com/Antaris/RazorEngine/issues/363#issuecomment-273106183

What's not mentioned in there is to make sure when adding the compilers section to your app.config, that the version number matches the version from the package you are installing. In the comment it was version 1.0.3, but the package I installed had 1.0.4 instead, so it needed to look like this:

<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>

查看更多
贪生不怕死
4楼-- · 2019-03-22 14:08

If you are running this from a 4.5.1 project, upgrading to 4.5.2 might fix it.

Otherwise, it is recommended to install this NuGet package to provide the new functionalities: Microsoft.CodeDom.Providers.DotNetCompilerPlatform

So doing something like this:

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

Might work. If it doesn't, try being explicit like this:

<p>@(Model.Person?.Name)</p>
查看更多
混吃等死
5楼-- · 2019-03-22 14:08

Other answers are quite good, but I found a good and short article that definitively clarify the steps for this issue: https://cpratt.co/using-csharp-6-or-7-with-mvc-5/

In short:

  1. In the Package Manager Console install Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

  2. checka/alters you Web.config with the following lines at the end:

<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>

查看更多
登录 后发表回答