137
votes

Background

We have a project that we're developing in VS 2015 with C#6 enabled that occasionally needs to be opened by developers using VS 2013 without C#6.

We have no intention to use C# 6 within this particular solution (as much as I'd like to).

Problem

Visual Studio and ReSharper suggest helpful C# 6 language constructs that render the solution inoperable in earlier versions of Visual Studio without C#6 support.

I've disabled the ReSharper C#6 support but I can't seem to disable / limit C# features across the whole solution.

Question

How do I limit C# to C#5 capabilities within a solution or within Visual Studio 2015?

6
Build tab, Advanced button, Language version setting. - Hans Passant
@HansPassant thanks! This is exactly it. I'll write it up in answer form but if you post the answer here, I'll be sure to mark yours as the correct one. - SeanKilleen
Exactly my problem! except our solution is in 2013, but I want to continue using VS2015 instead. - anish
@entre there's not necessarily a need; you can always just not use the C#6 features. Visual studio and resharper helpfully suggest refactorings that utilize these features, though. As long as your build machine supports C#6, it shouldn't be a problem. - SeanKilleen
I dont want to use c#6... but I am still getting those suggestions.. i removed them for resharper.. but asking for visual studio... i guess visual studio wont provide intellisense suggesting c#6 because my .net framework is 4.5 - harishr

6 Answers

137
votes

You can set the language feature for each project separately by going to Properties => Build tab => Advanced button => Language Version and set your preferred version.

You should realize that it will still use the new "C# 6.0" .Net Compiler Platform (codenamed Roslyn). However, that compiler will imitate the behavior of older compilers and will limit you to features only available on that specific language version.


I don't think that there's a solution-wide setting available.

49
votes

add below in .sln.DotSettings should disable it on solution level

<s:String x:Key="/Default/CodeInspection/CSharpLanguageProject/LanguageLevel/@EntryValue">CSharp50</s:String>

Or if you don't have a .sln.DotSettings file:

  1. If your solution file is called Apple.sln, create a file beside it called Apple.sln.DotSettings.

  2. Give it the following contents:

    <wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
        <s:String x:Key="/Default/CodeInspection/CSharpLanguageProject/LanguageLevel/@EntryValue">CSharp50</s:String>
    </wpf:ResourceDictionary>
    
  3. Close and reopen the solution, Resharper should only warn you about C#5 things.

  4. Don't forget to remove this when you eventually start using C#6 features! :)

11
votes

This tool I wrote might help you if you have many projects that you need to set LangVersion for.

10
votes

You can set the language feature for all the solutions/csproj with the MSBuildUserExtensionsPath.

Search the value of the $(MSBuildUserExtensionsPath), it should be something like C:\Users\$(User)\AppData\Local\Microsoft\MSBuild

Then edit the file Force.LangVersion.ImportBefore.props in the folder $(MSBuildUserExtensionsPath)\14.0\Imports\Microsoft.Common.Props\ImportBefore with :

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <LangVersion>5</LangVersion>
  </PropertyGroup>
</Project>
9
votes

Steps have already been written above, just adding a screenshot further of my VS2015:

Properties of project >> Build >> Advanced >> Language version

enter image description here

I set that to C# 5.0.

8
votes

Right click on Project in Project Explorer and select Properties.

When the Properties tab opens select Build and the click the Advance button in bottom right.

There is drop-down box called Language Version. Change the select to "C# 5.0"