AntonioPelleriti.it [aka z9]

I code, therefore I am

NAVIGATION - SEARCH

Utilizzare la sintassi di C# 6 nelle razor view di ASP.NET MVC

Effettuando l'upgrade di alcuni vecchi progetti ASP.NET MVC, e volendo utilizzare novità di C# 6, ormai irrinunciabili, per esempio operatore nameof o sintassi come quella delle stringhe interpolate, nelle Razor View, ho scoperto che, se non si vuol passare alla versione MVC 6, è necessario ricorrere ad una semplice ri-configurazione del progetto web.

Infatti tentando direttamente di usare per esempio l'operatore nameof, in Visual Studio apparirebbe l'errore 

ErrorCS8026Feature 'nameof operator' is not available in C# 5.  Please use language version 6 or greater.

come mostrato nella figura seguente:

 

Come risolvere? innanzitutto è necessario referenziare il compilatore Roslyn, ed è possibile farlo tramite l'apposito pacchetto nuget, cosa fattibile dal Package Manager Console con il comando:

PM> Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

 

 

Ora andiamo a modificare il web.config principale aggiungendo sotto il ramo configuration, le seguente sezione, per indicare di utilizzare il nuovo compilatore:

<system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.3.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.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
    </compilers>
  </system.codedom>
</configuration>

adesso basta un rebuild e ricordatevi di distribuire gli assembly e modificare il web.config anche in produzione!