配置 C# 语言版本
警告
不建议将 LangVersion
元素设置为 latest
。 latest
设置意味着已安装的编译器将使用其最新版本。 这可以在计算机之间进行更改,从而使得生成不可靠。 此外,它还支持可能需要当前 SDK 中不包含的运行时或库功能的语言功能。
如果必须明确指定 C# 版本,可以通过以下几种方式实现:
- 手动编辑项目文件。
- 为子目录中的多个项目设置语言版本。
- 配置 LangVersion 编译器选项。
提示
可以在“项目属性”页查看 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) 中所含的语法。 |