如何更改所有项目的 Visual Studio 2017 默认语言版本?

44

如何为所有项目设置C#7.0的语言版本?

Project/Properties/Build/Advanced.../高级构建设置屏幕

默认参数从哪里来,我想改变默认值。

PS:我不是指UI语言。


1
可能是 Visual Studio 2017 RC 更改语言 的重复问题。 - Wajdi Gharsalli
4
我不是指用户界面语言,而是指代码语言。 - giokoguashvili
看这个,可能会有帮助:https://blogs.msdn.microsoft.com/benjaminperkins/2017/03/23/how-to-enable-c-7-in-visual-studio-2017/ - Kirhgoph
3
我在C#7上构建了项目,为此我更改了每个项目的语言版本。但是我想更改VS的默认值,以便在不进行手动设置的情况下构建任何项目。 - giokoguashvili
1
如果您使用ReSharper,您可以按照此处第二个答案的做法进行操作:https://dev59.com/8l0a5IYBdhLWcg3wVHTU#31611892 - Ulrik
显示剩余4条评论
1个回答

41
default 值的含义来源于 C# 编译器本身。因此,要更改其含义,您需要更改编译器。但是,在 Visual Studio 2017 自带的编译器中,default 实际上代表 C# 7.0,因此您无需做任何操作。Visual Studio 项目系统仅将语言版本值传递给 MSBuild。然后,MSBuild 将其作为 /langversion 选项进一步传递给 C# 编译器。 /langversion 选项允许您指定编译器接受的最高语言版本。换句话说,它允许您将语言功能的使用限制为某个版本。如果您使用了比指定版本更高的语言版本特性,C# 编译器将会发出错误。这就是全部。如果您将 /langversion 指定为 default,则 C# 编译器将接受所有最新主要 C# 语言版本包括的有效语法(请参见 MSDN 上的 /langversion (C# 编译器选项) 页面)。Visual Studio 2017 自带的最后一个主要 C# 版本是 7.0。请参阅 C# GitHub 存储库上的C# 语言版本中添加的功能页面。

如果您需要在多个项目或解决方案中启用最新小版本(7.1、7.2 等)的功能或禁止使用一些新的 C# 功能,可以使用 MSBuild 15 Directory.Build.props 自定义文件。来自 MSDN 上自定义生成文章的相关摘录:

  

…现在,您可以通过在称为根目录下的单个文件 Directory.Build.props 中定义新属性一次性向每个项目添加新属性。当 MSBuild 运行时,Microsoft.Common.props 会搜索您的目录结构以查找 Directory.Build.props 文件(Microsoft.Common.targets 查找 Directory.Build.targets)。如果找到一个,则导入该属性。Directory.Build.props 是用户定义的文件,可为目录下的项目提供自定义内容。

以下是一个 Directory.Build.props 文件的示例,指示 C# 编译器接受最新小版本的 C# 版本 (Visual Studio 2017 版本 15.5.3 中的 C# 7.2) 的所有有效语法,在所有项目中生效,只要它们的 .csproj 文件不包括 <LangVersion> 标记,则该标记具有优先权:

<Project>
    <PropertyGroup>
        <LangVersion>latest</LangVersion>
    </PropertyGroup>
</Project>

了解更多信息,请查看:


2
我的VS17默认使用Framework 4.6.1和“C#最新主要版本(默认)”。如果我想使用ValueTuple(不使用nuget),我需要手动将Framework版本更改为4.7,这是可以的。但是,如果我想使用c# 7.2功能(in修饰符或readonly struct),除非我将语言版本更改为“C#最新次要版本(最新)”,否则项目将无法编译,然后我必须为每个构建配置执行此操作。难道没有一种方法可以将两者都默认设置为最新吗?您似乎暗示它已经应该(至少对于langversion),但事实并非如此。 - pinkfloydx33
1
您可以通过在“新建项目”对话框中更改默认的.NET Framework版本来为所有新项目设置默认版本。对于所有现有项目,您必须手动在UI或.csproj文件中直接更改它。 - Leonid Vasilev
3
“默认”语言版本指的是最后一个主要版本,即Visual Studio 2017编译器中的版本7.0。“最新”代表最后一个次要版本,在Visual Studio 2017 15.5编译器中它意味着版本7.2。请参见Visual Studio 2017 version 15.5 Release Notes。您可以通过在项目属性中选择“所有配置”,或将<LangVersion> latest </ LangVersion>放置在非条件<PropertyGroup>标记中的方式,为所有构建配置更改它在.csproj文件中。 - Leonid Vasilev
2
我甚至没有意识到框架版本在新项目对话框中,所以谢谢你。我完全忘记了“所有配置”“配置”,这对我来说肯定是有帮助的。我仍然在寻找一种方法来默认为所有新项目选择“最新”(次要版本),而无需手动执行任何操作(除了第一次)。我发现您可以编辑 Microsoft.Common.props 来包括 PropertyGroup,或者您可以在每个“模板”项目中进行设置(尽管那将是很多工作),但我不知道它们是否会在更新期间被覆盖。 - pinkfloydx33
尝试使用MSBuild 15 Directory.Build.props自定义文件。请参阅MSDN上的“自定义构建”文章。使用<LangVersion>latest</LangVersion><TargetFramework>net47</TargetFramework>标签。 - Leonid Vasilev
太好了!由于我的解决方案有200多个项目,这对将版本设置为7.1非常有帮助! - alexkovelsky

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