How to use C# 6 with Web Site project type?

Uwe Keim picture Uwe Keim · Jul 21, 2015 · Viewed 50.9k times · Source

Updated an existing Web Site project type Visual Studio 2015, I changed the Framework to 4.6.

I then expected to have all those new features available in my code behind files.

Unfortunately I'm getting errors like:

Error CS8026: Feature 'expression-bodied property' is not available in C# 5. Please use language version 6 or greater.

or e.g.:

Error CS8026: Feature 'interpolated strings' is not available in C# 5. Please use language version 6 or greater.

I did a quick Google check and found a guy posting some comments in a blog posting of ScottGu (search for "8026" on the page).

Since I do not understand his solution, plus I want to have the solution more visible, I've created this SO posting.

My question:

How can I have a Visual Studio 2015 project of type Web Site (i.e. not Web Application) to recognize C# 6 features?

Answer

jbtule picture jbtule · Jul 21, 2015

I've tested this with ASP.NET MVC 5 (tested 5.2.3), and your mileage may vary with other web frameworks, but you just need to add the Roslyn CodeDOM| NuGet package

CodeDOM Providers for .NET Compiler...

Replacement CodeDOM providers that use the new .NET Compiler Platform ("Roslyn") compiler as a service APIs. This provides support for new language features in systems using CodeDOM (e.g. ASP.NET runtime compilation) as well as improving the compilation performance of these systems.

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

https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/

The NuGet package should add the DLL files and add the following to your web.config.

  <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=\&quot;Web\&quot; /optionInfer+" />
    </compilers>
  </system.codedom>

If it's still missing. Try adding yourself.