配置 C# 语言版本

警告

不建议将 LangVersion 元素设置为 latestlatest 设置意味着已安装的编译器将使用其最新版本。 这可以在计算机之间进行更改,从而使得生成不可靠。 此外,它还支持可能需要当前 SDK 中不包含的运行时或库功能的语言功能。

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

提示

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

若要了解当前使用的语言版本,请在代码中添加 #error version(区分大小写)。 这样做可使编译器报告编译器错误 CS8304,并显示一条消息,其中包含正在使用的编译器版本和当前选择的语言版本。 有关详细信息,请参阅 #error(C# 参考)

为什么无法在 Visual Studio 中选择其他 C# 版本

在 Visual Studio 中,可能会禁用通过 UI 更改语言版本的选项,因为默认版本与项目的目标框架(TFM) 保持一致。 此默认配置可确保语言功能和运行时支持之间的兼容性。

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

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

编辑项目文件

可在项目文件中设置语言版本。 例如,如果你明确希望访问预览功能,请添加如下元素:

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

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

配置多个项目

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

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

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

C# 语言版本引用

重要

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

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

含义
preview 编译器接受最新预览版中的所有有效语言语法。
latest 编译器接受最新发布的编译器版本(包括次要版本)中的语法。
latestMajor
default
编译器接受最新发布的编译器主要版本中的语法。
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) 中所含的语法。