.NET 5 中的新增功能

.NET 5 是在 3.1 之后的 .NET Core 的下一个主要版本。 此版本名为 .NET 5 而不是 .NET Core 4,原因有两个:

  • 跳过了版本号 4.x,以避免与 .NET Framework 4.x 混淆。
  • “Core”已从名称中删除,以强调这是 .NET 今后的主要实现。 .NET 5 支持比 .NET Core 或 .NET Framework 更多的应用类型和平台。

ASP.NET Core 5.0 基于 .NET 5,但保留名称“Core”以避免将其与 ASP.NET MVC 5 混淆。 同样,Entity Framework Core 5.0 保留名称“Core”,以避免将其与 Entity Framework 5 和 6 混淆。

与 .NET Core 3.1 相比,.NET 5 包括以下改进和新功能:

.NET 5 不替换 .NET Framework

.NET 5 和更高版本是今后 .NET 的主要实现,但仍支持 .NET Framework 4.x。 没有计划将以下技术从 .NET Framework 移植到 .NET 5,但 .NET 中有一些替代方法:

科技 建议的替代方法
Web 窗体 ASP.NET Core RazorRazor Pages
Windows 工作流 (WF) Elsa-Workflows

Windows Communication Foundation

Windows Communication Foundation (WCF) 的原始实现仅在 Windows 上受支持。 但是,有一个可从 .NET Foundation 获取的客户端端口。 它完全 开源、跨平台,Microsoft支持。 下面列出了核心 NuGet 包:

通过 CoreWCF提供补充上述客户端库的服务器组件。 截至 2022 年 4 月,CoreWCF 正式得到Microsoft的支持。 但是,对于 WCF 的替代项,请考虑 gRPC

.NET 5 不替换 .NET Standard

在新的应用程序开发中,可以为所有项目类型(包括类库)指定 net5.0 目标框架标识符(TFM)。 在 .NET 5 工作负载之间共享代码得到了简化,因为你只需要 net5.0 TFM。

对于 .NET 5 应用和库,net5.0 TFM 组合并替换 netcoreappnetstandard TFM。 但是,如果打算在 .NET Framework、.NET Core 和 .NET 5 工作负载之间共享代码,可以通过将 netstandard2.0 指定为 TFM 来执行此操作。 有关详细信息,请参阅 .NET Standard

C# 更新

编写 .NET 5 应用的开发人员将有权访问最新的 C# 版本和功能。 .NET 5 与 C# 9 配对,这为语言带来了许多新功能。 下面是一些亮点:

  • 记录:具有基于值的相等语义的引用类型和由一个新的 with 表达式支持的非破坏性变化。

  • 关系模式匹配:将模式匹配功能扩展到关系运算符,以用于比较计算和表达式,包括逻辑模式 - 新关键字 andornot

  • 顶级语句:为了加速 C# 的采用和学习,可以省略 Main 方法,应用可以像以下示例一样简单:

    System.Console.Write("Hello world!");
    
  • 函数指针:公开以下中间语言 (IL) 操作码的语言构造:ldftncalli

有关可用 C# 9 功能的详细信息,请参阅 C# 9 中的新增功能

源生成器

除此之外,一些引人注目的新 C# 功能和源生成器正在逐步融入开发人员的项目。 源生成器允许在编译期间运行的代码检查程序结构,并生成与其他代码一起编译的附加文件。

有关源生成器的详细信息,请参阅 C# 源生成器简介C# 源生成器示例

F# 更新

F# 是 .NET 函数编程语言,使用 .NET 5,开发人员可以访问 F# 5。 其中一项新功能是内插字符串,类似于 C# 中的内插字符串,甚至是 JavaScript。

let name = "David"
let age = 36
let message = $"{name} is {age} years old."

除了基本字符串插值之外,还有类型化插值。 对于类型化内插,给定类型必须与格式说明符匹配。

let name = "David"
let age = 36
let message = $"%s{name} is %d{age} years old."

此格式类似于基于类型安全输入设置字符串格式的 sprintf 函数。

有关详细信息,请参阅 F# 5中的新增功能。

Visual Basic 更新

.NET 5 中没有 Visual Basic 的新语言功能。 但是,使用 .NET 5,Visual Basic 支持扩展到:

描述 dotnet new 参数
控制台应用程序 console
类库 classlib
WPF 应用程序 wpf
WPF 类库 wpflib
WPF 自定义控件库 wpfcustomcontrollib
WPF 用户控件库 wpfusercontrollib
Windows 表单 (WinForms) 应用程序 winforms
Windows 窗体 (WinForms) 类库 winformslib
单元测试项目 mstest
NUnit 3 测试项目 nunit
NUnit 3 测试项 nunit-test
xUnit 测试项目 xunit

有关 .NET CLI 中的项目模板的详细信息,请参阅 dotnet new

System.Text.Json 新功能

System.Text.Json 中新增了一些功能:

另请参阅