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.5harishr

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"