如何在一处更改我的解决方案中所有项目的 C# 语言版本?

Posted

技术标签:

【中文标题】如何在一处更改我的解决方案中所有项目的 C# 语言版本?【英文标题】:How to change C# Language Version for all of the projects in my solution in one place? 【发布时间】:2020-08-09 13:33:51 【问题描述】:

我有一个包含 20 个项目的解决方案,我想将所有项目的 C# 版本更改为 C# 7.3

有没有一种方法可以一次更改所有项目的版本?我知道我可以从 Project 的 Properties 更改 Language Version,但我不想重复 20 次。

【问题讨论】:

如果可能 - 您还可以将您的 Visual Studio 升级到 2019,其中 default language versions 设置为您想要的。 我建议更改一个项目并将更改后的项目与原始项目进行比较。然后您可以在文件中执行查找和替换以替换所有其他文件。 Notepad++ 有一个在文件中查找和替换的选项。 请注意,较新版本的 Visual Studio 不允许您通过此 UI 指定语言版本。语言版本根据目标框架确定。您仍然可以在项目文件中使用 LangLevel 覆盖它,如下面的答案所示。 【参考方案1】:

要同时为所有项目设置版本,您可以在存储库的根目录下创建一个名为 Directory.Build.props(在 Linux 上区分大小写)的文件。此文件包含项目的常用属性列表:

<Project>
  <PropertyGroup>
    <LangVersion>latest</LangVersion>
    <!--<LangVersion>preview</LangVersion>-->
    <!--<LangVersion>7.3</LangVersion>-->
  </PropertyGroup>
</Project>

https://www.meziantou.net/4-ways-to-enable-the-latest-csharp-features.htm#method-4-using-a-pro

【讨论】:

感谢这篇精彩的博客。是否可以使用特定版本,例如:&lt;LangVersion&gt;7.2&lt;/LangVersion&gt; 当然你可以指定你想要的版本比如7.3 不幸的是,intellisense 不适用于 Directory.Build.props 方法。它在我的解决方案文件中显示了很多错误。希望我能找到解决办法。 显然在旧的 SDK 项目中你可能需要ToolsVersion="16.0"。见***.com/questions/53633538/…【参考方案2】:

接受的答案很好,我只是添加一些细节。

我在存储库的根目录创建了Directory.Build.props 文件,并将其作为解决方案项 添加到解决方案中。这是文件的内容:

<Project>
  <PropertyGroup>
    <LangVersion>7.3</LangVersion>
    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
  </PropertyGroup>
</Project>

注1:

如果您修改这些设置,您需要重新启动 Visual Studio 以使更改生效。

注2:

您需要MSBuild version 15 或更高版本才能使用Directory.Build.props。要检查 MSBuild 版本,请在文本编辑器中打开您的项目文件并查找以下内容:

<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

这里,15.0 表示您的 MSBuild 版本,如果您需要升级您的 MSBuild 版本,请参阅this document。

【讨论】:

以上是关于如何在一处更改我的解决方案中所有项目的 C# 语言版本?的主要内容,如果未能解决你的问题,请参考以下文章

Alamofire 多个 URLS 错误处理在一处

Knockout 在一处显示所有错误

我的web系统设计规范

解决新版Cura 4的一处文本框显示异常Bug

在一处配置应用程序

在 monorepo Azure 中部署单一服务