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

137

背景

我们正在使用启用了C#6的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
建立标签页,高级按钮,语言版本设置。 - Hans Passant
@HansPassant 谢谢!这正是我要的。我会把它写成回答形式,但如果你在这里发布答案,我一定会将你的标记为正确答案。 - SeanKilleen
@entre,不一定需要使用C#6的功能;你可以选择不使用。但是,Visual Studio和ReSharper会提供有用的重构建议,利用这些功能。只要你的构建机支持C#6,就不应该有问题。 - SeanKilleen
我不想使用C#6...但我仍然得到那些建议..我已经在Resharper中将它们删除了..但是在Visual Studio中还是会出现..我猜测Visual Studio不会提供Intellisense建议C#6,因为我的.NET Framework是4.5。 - harishr
整个过程 - 如果您按照答案中的说明进行操作,您将为Visual Studio设置它。您需要将语言从“默认”更改为5。这可以在每个项目的属性中完成。 - SeanKilleen
显示剩余2条评论
6个回答

137
您可以通过转到 属性 => 构建选项卡 => 高级按钮 => 语言版本 并设置您喜欢的版本,为每个项目单独设置语言功能。
但是,请注意它仍将使用新的“C#6.0” .Net编译器平台(代号Roslyn)。但是,该编译器将模拟旧编译器的行为,并仅限于特定语言版本才可用的功能。
我认为没有解决方案可在整个解决方案中设置。

1
你知道VB.NET是否有相应的设置吗? - Bradley Uffner
2
我今天早些时候得到了我的答案。 https://dev59.com/aI3da4cB1Zd3GeqPuxWC - Bradley Uffner
1
在项目属性更改后,我的工作室只是在编辑器中标记C# 6.0代码。但不将其视为错误(成功构建)。 - Eugene
2
如果您有许多项目,我建议直接编辑 csproj 文件。在第一个“PropertyGroup”元素内添加以下内容:<LangVersion>5</LangVersion>。 - mhand
在VS2017中禁用C#7支持的方法与上述相同 - 只需使用<LangVersion>6</LangVersion>即可。 - Paul Suart

49
< p >在.sln.DotSettings中添加以下内容,应该可以在解决方案级别上禁用它。< /p >
<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实际上,这个答案只与Resharper有关,而OP已经禁用了它,因此它甚至不能回答问题。 - i3arnon
1
我也同意,这应该被标记为答案。OP询问了解决方案范围的设置,而只有这个答案提供了这些信息。 - sam-xor
1
无论如何,这并不妨碍Visual Studio显示微软自己的代码改进建议(这是实际问题要解决的)。这个答案对于ReSharper有效,但对于Visual Studio无效(并非我们所有人都在使用ReSharper)。 - Stephen Reindl

11

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


10
你可以使用 MSBuildUserExtensionsPath 来为所有的 solutions/csproj 设置语言特性。
搜索 $(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>

9

以上步骤已经写好,这里再附上我的VS2015的截图:

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

enter image description here

我将其设置为C# 5.0。


8

在项目资源管理器中右键单击项目,选择属性。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接