On my VS.NET 2015 development machine, the Razor views that use the nameof
operator work like a charm.
When deploying to a Windows server, it fails to compile the CSHTML Razor views:
The name 'nameof' does not exist in the current context.
In German:
Der Name 'nameof' ist im aktuellen Kontext nicht vorhanden.
I've installed .NET Framework 4.6 ("ASP.NET version: 4.6.81.0") with no success.
Most likely I'm missing something plain simple.
Still, I'm really clueless. Is it a web.config setting? Or something else?
My question:
How to enable C# 6 features (like the nameof
operator) in CSHTML Razor views?
C# NameOf operator is used to get name of a variable, class or method. It returns a simple string as a result. In error prone code, it is useful to capture a method name, in which error occurred. We can use it for logging, validating parameters, checking events etc.
The nameof operator, added in C# 6.0, addresses this — it allows capturing the string names of symbols that are in the scope.
idiom. : used to indicate the name that is used for someone or something.
According to this site, you need to reference the Roslyn compiler in your Web.config file to get C# 6 features to work in your razor views.
This can be achieved simply by installing the CodeDOM Providers for .NET Compiler NuGet package.
PM> Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Make sure in your file "web.config" the node system.codedom
exists.
<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=\"Web\" /optionInfer+"/> </compilers> </system.codedom>
And you'd reference the package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With