C# 6.0 Features Not Working with Visual Studio 2015
Solution 1
This works in MVC 5 (tested 5.2.3), you just need to add the roslyn code dom 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/
Solution 2
Well, I have MVC5 and recently installed VS 2015.
I've installed CodeDOM providers package, but it didn't help... But after that I realized, that package supports framework 4.5 only, while I have target framework set to 4.6 during tests - it works with 4.5 though...
So pay attention also to target framework. If you have 4.5 - just install package Microsoft.CodeDom.Providers.DotNetCompilerPlatform. But if you have 4.5.1-4.6 as a target, you will have to change in web.config section
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701">
<providerOption name="CompilerVersion" value="v4.0"/>
</compiler>
<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>
For C#, just change type to:
type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
Solution 3
I was having this same problem in Visual Studio 2015. Another answer here alluded to the solution I used, but they incorrectly specified the fix and never gave clarification.
On the the Visual Studio menu, select Project and you should see the sub-item Enable C#6 / VB 14 if you are having this problem. Select this menu sub-item. It will download the correct packages from Nuget and install them. After this, restart Visual Studio and reload your solution.
I cannot verify if this will also fix the Project Properties > Build > Advanced > Language Version selection to C# 6, so you might want to check this as well after enabling C# 6 from the menu.
Solution 4
Check your project properties, go to build, advanced and see if C# 6.0 if you don't have it as default.
Currently there's perfect support for MVC5 and C# 6.0 and works amazingly well!
Solution 5
Including following the advice of installing the latest Microsoft.CodeDom.Providers.DotNetCompilerPlatform
I also had to set my root Web.config
system.codedom
to this to finally get all of the errors in Visual Studio 2015
to go away:
<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>
Now restart Visual Studio
and that should do it.
Comments
-
Chris Schiffhauer almost 2 years
I am testing Visual Studio 2015 with C# 6.0 but the language features are not working. In an MVC web application, the following code does compile:
if (!string.IsNullOrWhiteSpace(Model.Profile?.TypeName)) { // More logic here... }
However, when I run the application via Debug and IIS Express, I get the following error:
CS1525: Invalid expression term '.'
How do I enable these features?
-
Daniel Eugen almost 9 yearsThis should be submitted as an answer, because it fixes the problem rather than having to upgrade to a beta version of MVC.
-
jbtule over 8 years@Deef you are incorrect. The Microsoft.Net.Compilers is related to Msbuild. the CodeDOM Providers is related to ASP.NET and other api's that compile at runtime.
-
David De Sloovere over 8 yearsYeah, you're right. I misread/misinterpretted because they sometimes repalces packages with new names and just add them as dependencies.
-
juFo over 8 years"Feature 'null propagating operator' is not available in C# 5. Please use language version 6 or greater." didn't know about the Advanced setting but doesn't seem to work here.
-
Serj Sagan over 8 yearsThis certainly helped me getting
C# 6
to work withASP.NET 4.6
, but it might have been better to post the code with the correcttype
already there... -
Siewers over 8 yearsIt might be worth mentioning to restart Visual Studio. It kept complaining after I installed the package, but a restart made it go away :)
-
Rono over 8 yearsWhen I run that I get a message saying "Install-Package : Unable to find package 'Microsoft.CodeDom.Providers.DotNetCompilerPlatform'" How do I get around this?
-
jbtule over 8 years@Rono, Make sure your package source is
nuget.org
. As you can see from the link, it is the correct name, and the package exists. -
Mir over 8 yearsHow do you change the default version to 6 so that I don't have to set it on each project?
-
Robert Ivanc over 7 yearsdefine "some". this does not work in vs 2015 update 3.
-
Robert Ivanc over 7 yearswhat website tab? if you mean properties/web there is no such feature there.
-
Michal Šuvada over 7 yearsI Visual Studio, when you select some WebSite project, the Website tab appears next to View tab. There you may find this feature.
-
user247702 over 7 yearsI've downvoted for now, please edit to clarify what exactly you mean, e.g. by adding a screenshot.
-
Carl over 7 yearsThanks, this had been working when I went home on a Tuesday and then didn't work when I came back on the Thursday. Somehow, this section of the config had gone AWOL, because I remember seeing it when I was getting it to work originally!
-
arame3333 over 7 yearsHad to delete all the dlls in the bin folder first before it would build
-
Manfred about 7 yearsThis answer also works for VS2017 RC4. In addition if you are using ReSharper you may have to restart VS to make the red squiggly lines go away. I'm using VS2017 RC4 with R# 2016.3.2.
-
Malcolm Anderson about 7 yearsWhen I got to project properties, I do not get a build menu. If I go to "Property Pages" I get a build menu, but I do not have an "advanced" button on the build screen. Translation, "This does not work" (for me)
-
Malcolm Anderson about 7 yearsMy VS version is Community 2015 Update 3 (14.0.25431.01)
-
Edward about 7 yearsThis sub-item is not in my Project menu. I have Unity 5.5.2 that opened up my VS 2015 Community to create some scripts. Upon adding a default to a property a compiler error showed by the red unline, stating I needed c# 6 as C# v.4 was currently loaded. Anytime I try to select properties of the project the screen just flashes but no page comes up.
-
Derreck Dean about 7 years@MalcolmAnderson it worked for me. Do you have a web site or web application project? I have a web application project. I get the "full-screen" project properties (by right clicking project file and clicking Properties, or by double clicking Properties node in the project itself), then click the Build tab, then click the button "Advanced..." which gives me the C# language selector. Mine was set to 'auto', but I have since changed it.
-
Andrew S about 6 yearsThese options are not available in a Web Site. So it doesn't work for people who aren't using a Web Application. Before someone says "just change to an Application", some of us have legacy applications to support, and aren't allowed to make changes unless requested.
-
Andrew S about 6 yearsI'm trying to fix the issue with a Website, and that menu item is not available for me. Note that other non-Web projects in the same solution have no problem using VB 14 features. They all target .NET 4.7, and I installed the CodeDom compiler.
-
mortenma71 almost 6 yearsThis answer worked for me: VS2017 v15.7.3. I got the error message "Error CS8026 Feature 'interpolated strings' is not available in C# 5. Please use language version 6 or greater." when using c# > v5 featrues in razor views in a asp.net mvc 4.6.1 project. See also (dave.ninja/c-6/using-c-6-0-features-in-asp-net-mvc-razor and dusted.codes/…)