我正在彻底修改包含多个项目的遗留解决方案,在它们的 csproj 文件中,有些项目具有
<LangVersion>default</LangVersion>
,其他项目则具有指定的版本,例如 <LangVersion>7.3</LangVersion>
现在,我最近发现
<LangVersion>default</LangVersion>
基本上指示可以使用编译器可用的 C# 语法的最新主要版本。
通常的搜索并没有揭示这些信息。
附注我正在利用 Visual Studio 2022 Pro 和 .Net 4.7.2,以及在开发计算机上安装并可用的 .Net 4.81,开发一个 Web 应用程序,即 asp.net,具有各种类库。
P.P.S。请参阅此帖子了解上下文
Edit1:请告诉我,因为这是相关的,并澄清该编译器正在使用什么编译器版本和什么语言版本......虽然@MarcGravell已经提供了如何发现哪个编译器版本和语言版本(谢谢为此!),我仍然对我所经历的事情感到困惑,这似乎与微软所说的相矛盾:
如果我运行 .Net 4.7.2 项目并使用
<LangVersion>default</LangVersion>
(当编译器查看我正在使用的框架时,应该使用编译器支持的最大主要版本))然后我可以使用引入的语法C# 9.0,例如使用 .Net 4.7.2 框架时“创建目标类型的对象” - 根据 MS 的说法,使用 <LangVersion>default</LangVersion>
时不应如此,请参阅下面的粗体文本...
“最新的 C# 编译器会根据项目的目标框架确定默认语言版本。Visual Studio 不提供更改该值的 UI,但您可以通过编辑 csproj 文件来更改它。默认的选择可确保您使用与目标框架兼容的最新语言版本。 您可以从访问与项目目标兼容的最新语言功能中受益。此默认选择还可以确保您不会使用需要类型或运行时行为的语言您的目标框架。选择比默认版本更新的语言版本可能会导致难以诊断编译时和运行时错误。
C# 11 仅在 .NET 7 及更高版本上受支持。 C# 10 仅在 .NET 6 及更高版本上受支持。 C# 9 仅在 .NET 5 及更高版本上受支持。”,取自 https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/configure-language-version
在您的 C# 文件中输入:
#error version
它会告诉你;例如,我看到
错误 CS8304 编译器版本:'4.8.0-3.23504.4 (81d92746)'。
语言版本:预览。
(顶部数字是实际的编译器版本;底部数字是应用
<LangVersion>
等之后的数字)
一般来说:避免使用
<LangVersion>default</LangVersion>
等,因为它不明确并且取决于所使用的构建工具;最好使用特定的 <LangVersion>10</LangVersion>
(通常在 Directory.Build.props
文件中,因此不需要重复),因为它会在不可用时给出合适的清晰消息。这可以与 global.json
结合使用,以确保合适的构建工具版本。