配置 C# 语言版本

本文中的信息适用于 .NET 5 及更高版本。 对于 UWP 项目,请参阅有关 选择 UWP 版本的文章中的此信息。

在 Visual Studio 中,禁用通过 UI 更改语言版本的选项,因为默认版本与项目的目标框架 (TFM) 保持一致。 该默认配置确保语言特性与运行时支持的兼容性 若要在 Visual Studio 中更改语言版本,请更改项目的目标框架。

例如,将目标 TFM (例如,从 .NET 6 更改为 .NET 9)相应地更新语言版本,从 C# 10 更新为 C# 13。 该方法可防止运行时兼容性问题,并最大程度减少因不受支持语言特性导致的意外构建错误

如果需要与自动选择的语言版本不同的特定语言版本,请参阅本文中的方法,直接替代项目文件中的默认设置。

警告

不建议将 LangVersion 元素设置为 latestlatest 设置意味着已安装的编译器将使用其最新版本。 latest 的值在不同的计算机之间可能会有所变化,从而导致构建不可靠。 此外,它还支持可能需要当前 SDK 中不包含的运行时或库功能的语言功能。

如果必须明确指定 C# 版本,可以通过以下几种方式实现:

提示

可以在“项目属性”页查看 Visual Studio 中的语言版本。 在“生成”选项卡下,“高级”窗格将显示所选版本。

若要了解当前使用的语言版本,请在代码中添加 #error version(区分大小写)。 该编译指令会导致编译器报告编译错误 CS8304,错误信息中包含编译器版本和当前选择的语言版本 有关此杂注的详细信息,请参阅 #error(C# 参考)

编辑项目文件

可在项目文件中设置语言版本。 项目文件是 *.csproj 项目根文件夹中的文件。 例如,如果显式想要访问预览功能,请添加如下例所示的元素:

<PropertyGroup>
   <LangVersion>preview</LangVersion>
</PropertyGroup>

该值 preview 使用编译器支持的最新可用预览 C# 语言版本。

配置多个项目

若要配置多个 C# 项目,可以创建一个 Directory.Build.props 文件(通常位于解决方案目录中),其中包含 <LangVersion> 该元素。 将以下设置添加到 Directory.Build.props 文件:

<Project>
 <PropertyGroup>
   <LangVersion>preview</LangVersion>
 </PropertyGroup>
</Project>

包含该文件的目录的所有子目录中的版本现在使用 C# 预览版。 有关详细信息,请查看自定义生成

注释

C# 和 VB 的版本不同。 不要将 Directory.Build.Props 文件用于子目录包含这两种语言的项目的文件夹。 版本不匹配。

C# 语言版本引用

重要

不支持使用比目标 TFM 关联的版本更新的 C# 语言版本。

下表显示当前所有 C# 语言版本。 较旧的编译器可能无法理解每个值。 如果安装了最新的 .NET SDK,则可以访问列出的所有内容。

含义
preview 编译器接受最新预览版中的所有有效语言语法。
latest 编译器接受最新发布的编译器版本(包括次要版本)中的语法。
latestMajor
default
编译器接受最新发布的编译器主要版本中的语法。
14.0 编译器仅接受 C# 14 或更低版本中包含的语法。
13.0 编译器只接受 C# 13 或更低版本中所含的语法。
12.0 编译器只接受 C# 12 或更低版本中所含的语法。
11.0 编译器只接受 C# 11 或更低版本中包含的语法。
10.0 编译器只接受 C# 10 或更低版本中所含的语法。
9.0 编译器只接受 C# 9 或更低版本中所含的语法。
8.0 编译器只接受 C# 8.0 或更低版本中所含的语法。
7.3 编译器只接受 C# 7.3 或更低版本中所含的语法。
7.2 编译器只接受 C# 7.2 或更低版本中所含的语法。
7.1 编译器只接受 C# 7.1 或更低版本中所含的语法。
7 编译器只接受 C# 7.0 或更低版本中所含的语法。
6 编译器只接受 C# 6.0 或更低版本中所含的语法。
5 编译器只接受 C# 5.0 或更低版本中所含的语法。
4 编译器只接受 C# 4.0 或更低版本中所含的语法。
3 编译器只接受 C# 3.0 或更低版本中所含的语法。
ISO-2
2
编译器只接受 ISO/IEC 23270:2006 C# (2.0) 中所含的语法。
ISO-1
1
编译器只接受 ISO/IEC 23270:2003 C# (1.0/1.2) 中所含的语法。