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

How do I disable C# 6 Support in Visual Studio 2015?

背景

我们有一个项目是在启用了 C#6 的 VS 2015 中开发的,偶尔需要由使用没有 C#6 的 VS 2013 的开发人员打开。

我们无意在此特定解决方案中使用 C# 6(尽管我愿意)。

问题

Visual Studio 和 ReSharper 建议使用有用的 C#6 语言结构,使解决方案在没有 C#6 支持的早期版本 Visual Studio 中无法运行。

我已经 disabled the ReSharper C#6 support 但我似乎无法在整个解决方案中禁用/限制 C# 功能。

问题

如何在解决方案或 Visual Studio 2015 年内限制 C# 到 C#5 的功能?

您可以转至 Properties => Build tab => Advanced button => Language Version 并设置您的首选版本,从而为每个项目分别设置语言功能。

您应该意识到它仍将使用新的 "C# 6.0" .Net 编译器平台(代号 Roslyn)。但是,该编译器将模仿 旧编译器的行为,并将限制您使用仅适用于该特定语言版本的功能。


我认为没有可用的解决方案范围设置。

右键单击 Project Explorer 中的 Project 和 select Properties。

当“属性”选项卡打开时 select 构建并单击右下角的“高级”按钮。

有一个叫做语言版本的下拉框。将 select 更改为 "C# 5.0"

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

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

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

  1. 如果您的解决方案文件名为 Apple.sln,请在其旁边创建一个名为 Apple.sln.DotSettings.

  2. 的文件
  3. 给它以下内容:

    <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>
    
  4. 关闭并重新打开解决方案,Resharper 应该只会警告您有关 C#5 的事情。

  5. 当您最终开始使用 C#6 功能时,请不要忘记删除它! :)

您可以为所有 solutions/csprojMSBuildUserExtensionsPath 设置语言功能。

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

然后用 :

编辑文件夹 $(MSBuildUserExtensionsPath).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>

如果您有很多项目需要设置 LangVersion,我写的这篇 tool 可能会对您有所帮助。

上面已经写了步骤,再贴一张我的VS2015的截图:

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

我将其设置为 C# 5.0。