如何在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
文件:
-
如果您的解决scheme文件名为Apple.sln,请在旁边创build一个名为Apple.sln.DotSettings的文件。
-
给它以下内容:
<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>
-
closures并重新打开解决scheme,Resharper应该只警告你关于C#5的东西。
-
当您最终开始使用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。