.NET 6 中的新增功能

.NET 6 提供 .NET 统一计划的最终部分,该计划在 .NET 5 中启动。 .NET 6 在移动、桌面、IoT 和云应用之间统一了 SDK、基础库和运行时。 除了这方面的统一以外,.NET 6 生态系统还提供了以下功能:


简化开发:轻松入门。 C# 10 中的新语言功能可减少需要编写的代码量。 利用 Web 堆栈和最小 API 的投资,可以轻松地快速编写更小、更快速的微服务。


更佳的性能:.NET 6 是最快的完整堆栈 Web 框架,如果在云中运行,则会降低计算成本。


终极工作效率:.Net 6 和 Visual Studio 2022 提供热重载、新的 git 工具、智能代码编辑、可靠的诊断和测试工具以及更好的团队协作。


.NET 6 将作为长期支持 (LTS) 版本得到三年的支持。


预览功能默认为禁用状态。 它们还不支持在生产环境中使用,并且可能会在将来的版本中删除。 新的 RequiresPreviewFeaturesAttribute 用于批注预览 API,如果使用这些预览 API,则相应的分析器会发出警报。


Visual Studio 2022 和 Visual Studio 2022 for Mac(以及更高版本)支持 .NET 6。


本文未涵盖 .NET 6 的所有新功能。 若要查看所有新功能,以及有关本文中列出的功能的详细信息,请参阅宣布发布 .NET 6 博客文章。


性能

.NET 6 包含大量性能改进。 本部分列出了 FileStream、按配置优化和 AOT 编译中的一些改进。 有关详细信息,请参阅 .NET 6 中的性能改进博客文章。


FileStream

已为 .NET 6 重写 System.IO.FileStream 类型,以便在 Windows 上提供更佳的性能和可靠性。 现在 FileStream 绝不会在为 Windows 上的异步 I/O 创建时阻止。 有关详细信息,请参阅 .NET 6 中的文件 IO 改进博客文章。


按配置优化

按配置优化 (PGO) 是指 JIT 编译器根据最常使用的类型和代码路径生成优化后的代码。 .NET 6 引入了动态 PGO。 动态 PGO 与分层编译配合运作,以根据层级 0 中实施的其他检测来进一步优化代码。 动态 PGO 默认情况下处于禁用状态,但可以使用 DOTNET_TieredPGO环境变量来启用它。 有关详细信息,请参阅 JIT 性能改进。


Crossgen2

.NET 6 引入了 Crossgen2,它是已被删除的 Crossgen 的后继版本。 Crossgen 和 Crossgen2 是用于提供预先 (AOT) 编译的工具,可改进应用的启动时间。 Crossgen2 是用 C# (而不是 C++)编写的,可执行之前的版本无法实现的分析和优化。 有关详细信息,请参阅有关 Crossgen2 的会话。


Arm64 支持

.NET 6 版本支持 macOS Arm64(或“Apple Silicon”)和 Windows Arm64 操作系统,支持本机 Arm64 执行和 x64 模拟。 此外,x64 和 Arm64 .NET 安装程序现在会并行安装。 有关详细信息,请参阅对 macOS 11 和 Windows 11 的 Arm64 和 x64 .NET 支持。


热重载

使用热重载功能,可以修改应用源代码,并立即将这些更改应用到正在运行的应用。 此功能的目的是避免在编辑之间重新启动应用程序,从而提高工作效率。 热重载在 Visual Studio 2022 和 dotnet watch 命令行工具中可用。 热重载适用于大多数类型的 .NET 应用以及 C#、Visual Basic 和 C++ 源代码。 有关详细信息,请参阅热重载博客文章。


.NET MAUI

.NET 多平台应用 UI ( .NET MAUI) 仍处于预览状态,会在 2022 第一季度推出候选发布版本,并在 2022 的第二季度正式发布 (GA)。 使用 .NET MAUI,可以使用单个代码库生成适用于桌面和移动操作系统的本机客户端应用。 有关详细信息,请参阅博客文章:关于 .NET 多平台应用 UI 的更新。


C# 10 和模板

C# 10 包括一些创新,如 global using 指令、文件范围内的命名空间声明和记录结构。 有关详细信息,请参阅 C# 10 中的新增功能。


为了配合这些内容,已采用新式 C# .NET SDK 项目模板以使用一些新的语言功能:


async Main 方法

顶级语句

目标类型的新表达式

隐式 global using 指令

文件范围的命名空间

可为空引用类型

通过将这些新语言功能添加到项目模板,可从启用的功能开始编写新代码。 但是,在升级到 .NET 6 时,不会影响现有的代码。 有关这些模板更改的详细信息,请参阅博客文章:.NET SDK:新式 C# 项目模板。


F# 和 Visual Basic

F# 6 增加了对 F# 语言和 F# 交互窗口的几项改进。 有关详细信息,请参阅 F# 6 中的新增功能。


Visual Basic 在 Visual Studio 体验和 Windows 窗体项目启动方面进行了改进。