【问题标题】:How to change Visual Studio 2017 default language version for all projects?如何更改所有项目的 Visual Studio 2017 默认语言版本?
【发布时间】:2017-11-25 17:12:25
【问题描述】:

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

默认参数哪里来的,我要改默认值

PS:我不是指 UI 语言

【问题讨论】:

标签: c# visual-studio


【解决方案1】:

default值的含义来自C#编译器本身。所以为了改变它的意思,你需要改变编译器。

但在 Visual Studio 2017 附带的编译器中,default 实际上表示 C# 7.0,因此您无需执行任何操作。

Visual Studio 项目系统仅将语言版本值传递给 MSBuild。 MSBuild 将其作为/langversion 选项进一步传递给C# 编译器。 /langversion 选项允许您指定编译器接受的高级语言版本。换句话说,它允许您将语言功能的使用限制为某个版本。如果您使用高于您指定的语言版本的功能,C# 编译器将发出错误。就这样。如果将/langversion 指定为default,C# 编译器将接受最后一个主要C# 语言版本包含的所有有效语法(请参阅MSDN 上的/langversion (C# Compiler Options) 页)。 Visual Studio 2017 附带的最后一个主要 C# 版本是 7.0。看 Features Added in C# Language Versions C# GitHub 存储库上的页面。

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

...现在,您可以通过在一个名为 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>

更多信息请查看:

【讨论】:

  • 我的 VS17 默认为 Framework 4.6.1 和“C# 最新的主要版本(默认)”。如果我想使用 ValueTuples(没有 nuget),我需要手动将框架版本更改为 4.7,这可以。但是现在如果我想使用 c# 7.2 功能(in 修饰符或readonly struct),除非我将语言版本更改为“C# 最新次要版本(最新)”,否则项目将无法编译,然后我必须这样做每个构建配置。有没有办法将两者都默认为最新的?您似乎暗示它已经应该(至少对于 langversion)但情况似乎并非如此
  • 您可以通过在“新建项目”对话框中更改它来为所有新项目设置默认的 .NET Framework 版本。对于所有现有项目,您必须直接在 UI 或 .csproj 文件中手动更改它。
  • default 语言版本代表最后一个主要版本,即 Visual Studio 2017 附带的编译器中的 7.0。latest 代表最后一个次要版本。在 Visual Studio 2017 15.5 附带的编译器中,它意味着 7.2。见Visual Studio 2017 version 15.5 Release Notes。您可以通过在项目属性的配置下拉菜单中选择 All Configurations 或将 &lt;LangVersion&gt;latest&lt;/LangVersion&gt; 放置在 .csproj 文件中的非条件 &lt;PropertyGroup&gt; 标记中来更改所有构建配置。
  • 我什至没有意识到框架版本在“新项目”对话框中,非常感谢。我完全忘记了在这里绝对有用的“所有配置”“配置”。我仍在寻找一种方法,将所有新项目默认为“最新”(次要),而无需手动执行任何操作(即第一次除外)。我发现您可以编辑 Microsoft.Common.props 以包含 PropertyGroup 或者您可以在每个“模板”项目中执行此操作(尽管这将是很多工作)但我不知道这些是否会在更新期间被覆盖
  • 试用 MSBuild 15 Directory.Build.props 自定义文件。请参阅 MSDN 上的 Customize your build 文章。使用&lt;LangVersion&gt;latest&lt;/LangVersion&gt;&lt;TargetFramework&gt;net47&lt;/TargetFramework&gt; 标签。
猜你喜欢
  • 2021-01-28
  • 1970-01-01
  • 2019-03-21
  • 2023-04-04
  • 2017-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-30
相关资源
最近更新 更多