.NET Framework 4.7.2 中的 C# 8 功能

C# 8 features in .NET Framework 4.7.2

在一个针对 .NET Framework 4.7.2 的 c# 项目中,我将本地函数设为静态,因为 Visual Studio (16.3.3) 建议这样做。一切都编译并运行良好。但是当我在安装了 Visual Studio Build Tools (16.3.3) 的 CI 构建服务器上推送它时,它抱怨说:

error CS8652: The feature 'static local functions' is currently in Preview and unsupported. To use Preview features, use the 'preview' language version.

我发现静态局部函数是 C# 8 的一项功能,而 C# 8 不适用于面向 .NET Framework 4.7.2 的项目。那么为什么它一开始就可以工作,我该怎么做才能让它在构建服务器上编译?

C# 8.0 的一些功能在 .NET Framework 中可用,但不是全部。如果您可以在本地编译,您的构建服务器也应该可以编译。但请注意:C# 8.0 仅在实现 .NET Standard 2.1 的框架上得到正式支持(.NET Framework 永远不会这样做)。所以虽然它可能有效,但也可能存在问题。

不要再使用 LangVersion preview。 C# 8.0 随 VS2019 16.3 一起发布。使用 LangVersion latest(或 latestMajor8.0)在默认情况下不支持 C# 8.0 的项目中获得支持(参见 C# language versioning)。

为此,请确保您的 csproj 文件包含 属性 <LangVersion>latest</LangVersion>。您需要手动编辑 csproj 文件才能执行此操作。 UI更改语言版本在VS2019 16.3中被禁用,因为每个目标框架现在正式只支持单一语言版本。