.NET 5 的新变化

.NET 5 是继 3.1 之后 .NET Core 的下一个主要版本。 出于以下两个原因,我们将此新版本命名为 .NET 5,而不是 .NET Core 4:

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

ASP.NET Core 5.0 虽以 .NET 5 为基础,但保留了名称“Core”以避免与 ASP.NET MVC 5 混淆。 同理,Entity Framework Core 5.0 保留了名称“Core”,以避免与 Entity Framework 5 和 Entity Framework 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 中新增了一些功能:

另请参阅