最新的 C# 编译器根据项目的一个或多个目标框架确定默认语言版本。 Visual Studio 不提供用于更改值的 UI,但可以通过编辑 .csproj 文件来更改值。 此默认选择可确保使用与目标框架兼容的最新语言版本。 你将从访问与项目目标兼容的最新语言功能中受益。 此默认选择还可确保不会使用需要类型或运行时行为在目标框架中不可用的语言。 选择比默认版本更高的语言版本可能导致难以诊断编译时和运行时错误。
C# 13 仅在 .NET 9 及更高版本上受支持。 C# 12 仅在 .NET 8 及更高版本上受到支持。 C# 11 仅在 .NET 7 及更高版本上受支持。
有关 Visual Studio 版本支持的 NET 版本的详细信息,请查看 Visual Studio 平台兼容性页面。 查看 C# 的 Mono 页面,了解 Mono 与 C# 版本的兼容性。
默认值编译器根据以下规则确定默认值:
目标版本C# 语言版本的默认值.NET9.xC# 13.NET8.xC# 12.NET7.xC# 11.NET6.xC# 10.NET5.xC# 9.0.NET Core3.xC# 8.0.NET Core2.xC# 7.3.NET Standard2.1C# 8.0.NET Standard2.0C# 7.3.NET Standard1.xC# 7.3.NET Framework全部C# 7.3如果你的项目是以具有相应预览语言版本的 preview 框架为目标,那么使用的语言版本是预览语言版本。 你可在任何环境中使用该预览版提供的最新功能,而不会影响面向已发布 .NET Core 版本的项目。
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) 中所含的语法。注意
使用 default 值指定 LangVersion 与省略 LangVersion 选项不同。 指定 default 会使用编译器支持的语言的最新版本,而不考虑目标框架。 例如,从当前版本的 Visual Studio 版本 2022 生成面向 .NET 6 的项目时,如果未指定 LangVersion,则使用 C# 10,但如果 LangVersion 设置为 default,则使用 C# 12。