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


136

背景

我们有一个在VS 2015中启用C#6的项目,开发人员有时需要使用不带C#6的VS 2013来打开该项目。

我们无意在此特定解决方案中使用C#6(正如我所希望的那样)。

问题

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

我已禁用ReSharper C#6支持,但似乎无法在整个解决方案中禁用/限制C#功能。

如何在解决方案中或Visual Studio 2015中将C#限制为C#5功能?


17
生成选项卡,高级按钮,语言版本设置。
汉斯·帕桑

@HansPassant谢谢!就是这样 我会将其写在答案表中,但是如果您在此处发布答案,我将确保将您的答案标记为正确的答案。
SeanKilleen

正是我的问题!除了我们的解决方案是在2013年,但我想继续使用VS2015。
阿尼什

@entre不一定需要;您总是可以不使用 C#6功能。但是,Visual Studio和转发器可帮助您建议利用这些功能的重构。只要您的构建机器支持C#6,就不会有问题。
SeanKilleen 2015年

我不想使用c#6 ...但是我仍然收到那些建议..我删除了它们以进行剃须刀..但要求使用Visual Studio ...我想Visual Studio不会提供智能提示来建议c#6,因为我的.net框架是4.5
harishr

Answers:


136

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

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


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


1
您知道VB.NET是否有等效设置吗?
Bradley Uffner 2015年

2
我今天早些时候得到了答案。stackoverflow.com/questions/31454902/...
布拉德利Uffner

1
在更改项目属性后,我的Studio只是在编辑器中标记了C#6.0代码。但不要将其视为错误(成功构建)。
Eugene Griaznov

2
如果您有很多项目,建议您直接编辑csproj。在第一个PropertyGroup元素内添加以下内容:<LangVersion>5</LangVersion>
mhand

在VS2017中禁用C#7支持的工作方式完全相同-只需使用<LangVersion>6</LangVersion>代替即可。
保罗·苏亚特

49

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

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

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

  1. 如果您的解决方案文件名为Apple.sln,请在该文件旁边创建一个名为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. 关闭并重新打开解决方案,Resharper仅应警告您有关C#5的问题。

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


1
这应该被标记为答案,因为它适用于解决方案中的所有项目,并且可以签入文件
。– twoleggedhorse

8
@twoleggedhorse实际上,此答案仅与已禁用OP的Resharper有关,因此甚至无法回答问题。
i3arnon '16

1
我也同意,这应该标记为答案。OP询问了解决方案范围的设置,只有此答案才能提供。
sam-xor

1
好吧,无论如何这不会阻止Visual Studio显示Microsoft自己的代码改进建议(这是防止出现这些问题的实际问题)。此答案适用于ReSharper,不适用于Visual Studio(并非我们所有人都在使用ReSharper)。
史蒂芬·雷德尔

11

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


10

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

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

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

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

9

上面已经编写了步骤,只是在VS2015的基础上添加了屏幕截图:

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

在此处输入图片说明

我将其设置为C#5.0。


8

右键单击Project Explorer中的Project,然后选择Properties。

当“属性”选项卡打开时,选择“生成”,然后单击右下角的“高级”按钮。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.