如何在Visual Studio 2015中禁用C#6支持?

背景

我们有一个在VS 2015中开发的项目,启用了C#6,偶尔需要开发者使用VS 2013而不使用C#6。

我们不打算在这个特定的解决scheme中使用C#6(尽可能多的)。

问题

Visual Studio和ReSharperbuild议有用的C#6语言结构,使得Visual Studio早期版本中的解决scheme无法运行,而无需C#6支持。

我禁用了ReSharper C#6支持,但似乎无法在整个解决scheme中禁用/限制C#function。

如何在解决scheme或Visual Studio 2015中将C#限制为C#5function?

您可以通过转到Properties => Build tab => Advanced button => Language Version来设置每个项目的语言function,并设置您的首选版本。

你应该认识到,它仍然会使用新的“C#6.0”.Net编译器平台(代号为Roslyn)。 但是,该编译器将模仿较旧的编译器的行为,并将限制您只能在该特定语言版本上使用的function。


我不认为有一个解决scheme可用的设置。

添加下面的.sln.DotSettings应该在解决scheme级别禁用它

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

或者,如果您没有.sln.DotSettings文件:

  1. 如果您的解决scheme文件名为Apple.sln,请在旁边创build一个名为Apple.sln.DotSettings的文件。

  2. 给它以下内容:

     <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. closures并重新打开解决scheme,Resharper应该只警告你关于C#5的东西。

  4. 当您最终开始使用C#6function时,请不要忘记删除它。 🙂

在Project Explorer中右键单击Project,然后selectProperties。

当“属性”选项卡打开时,select“构build”,然后单击右下angular的“高级”button。

有一个名为语言版本的下拉框。 将select更改为“C#5.0”

如果您有许多需要设置LangVersion项目,我写的这个工具可能会帮助您。

您可以使用MSBuildUserExtensionsPath设置所有solutions/csproj的语言function。

search$(MSBuildUserExtensionsPath)的值,它应该是类似于C:\Users\$(User)\AppData\Local\Microsoft\MSBuild

然后使用以下命令编辑$(MSBuildUserExtensionsPath)\14.0\Imports\Microsoft.Common.Props\ImportBefore文件夹中的Force.LangVersion.ImportBefore.props文件:

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

上面已经写了一些步骤,只是添加了我的VS2015的屏幕截图:

项目属性>>构build>>高级>>语言版本

在这里输入图像说明

我将其设置为C#5.0。