web-dev-qa-db-fra.com

Comment faire pour que le moteur de vue de rasoir utilise c # 6.0

Actuellement, mon moteur de vue de rasoir lance et une erreur indiquant "Veuillez utiliser la version linguistique 6 ou supérieure". C'est peut-être juste plus précis, ce qui me donne un pointeur. Mais comment utiliser le rasoir en C # 6.0. Reste de ma solution dans les fichiers cs je peux utiliser toutes les nouvelles fonctionnalités de la version 7.

38
MoXplod

Je pense que cela est dû à un bogue dans les modèles de web.config lorsque le projet est mis à niveau vers une version plus récente du framework .net.

J'ai pu résoudre ce problème en accédant à web.config, trouver le system.codedom node, et changer le contenu pour ressembler à ceci:

<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>
21
Bradley Uffner

Si vous l'exécutez à partir d'un 4.5.1 projet, mise à niveau vers 4.5.2 pourrait y remédier.

Sinon, il est recommandé d'installer ce package NuGet pour fournir les nouvelles fonctionnalités: Microsoft.CodeDom.Providers.DotNetCompilerPlatform

Donc, faire quelque chose comme ça:

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

Pourrait fonctionner. Si ce n'est pas le cas, essayez d'être explicite comme ceci:

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

Les meilleures instructions pas à pas que j'ai pu trouver pour activer les fonctionnalités C # 6 dans les modèles RazorEngine sont ici: https://github.com/Antaris/RazorEngine/issues/363#issuecomment-27310618

Ce qui n'est pas mentionné ici est de s'assurer lors de l'ajout de la section des compilateurs à votre app.config, que le numéro de version correspond à la version du package que vous installez. Dans le commentaire, c'était la version 1.0.3, mais le paquet que j'ai installé avait la version 1.0.4 à la place, il devait donc ressembler à ceci:

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

Les autres réponses sont assez bonnes, mais j'ai trouvé un bon et court article qui clarifie définitivement les étapes de ce problème: https://cpratt.co/using-csharp-6-or-7-with-mvc-5 /

En bref:

  1. Dans la console du gestionnaire de packages, installez Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

  2. checka/vous modifie Web.config avec les lignes suivantes à la fin:

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

3
Gianpiero Caretti