.NET 9 中的新增功能

了解 .NET 9 中的新功能,并查找指向进一步文档的链接。

.NET 9 是 .NET 8的继任者,它特别关注云原生应用和性能。 作为标准期限支持 (STS) 版本,它将在 18 个月内受到支持。 可从此处下载 .NET 9

对于 .NET 9 的新增功能,工程团队在 GitHub 讨论中发布了 .NET 9 预览版更新。 这是一个提出问题并提供有关发布反馈的好地方。

.NET 运行时

.NET 9 运行时包含一个新的属性模型,该模型支持具有剪裁功能的特性切换。 新属性使定义功能开关成为可能,这样库就可以用它来切换功能区域。

垃圾回收包括动态适应应用程序大小功能,默认情况下使用该功能代替服务器 GC。

运行时还包括许多性能改进,包括循环优化、内联和 Arm64 矢量化和代码生成。

有关详细信息,请参阅 .NET 9 运行时中的新增功能。

.NET 库

System.Text.Json 添加了对可为 null 引用类型注释和从类型导出 JSON 模式的支持。 它添加了新选项,可用于自定义写入 JSON 的缩进,并从单个流中读取多个根级 JSON 值。

在 LINQ 中,新方法 CountByAggregateBy 使可以通过键聚合状态,而无需通过 GroupBy分配中间分组。

对于集合类型,System.Collections.Generic.PriorityQueue<TElement,TPriority> 类型包括可用于 更新 队列中项优先级的新 Remove(TElement, TElement, TPriority, IEqualityComparer<TElement>) 方法。

对于加密,.NET 9 在 CryptographicOperations 类型上添加了一个新的一次性哈希方法。 它还添加了使用 KMAC 算法的新类。

对于反射,新的 PersistedAssemblyBuilder 类型可让你保存发出的程序集。 此新类还包括 PDB 支持,这意味着可以发出符号信息,并使用它调试生成的程序集。

TimeSpan 类包括新的 From* 方法,可用于从 int(而不是 double)创建 TimeSpan 对象。 这些方法有助于避免浮点计算固有不精确导致的错误。

有关详细信息,请参阅 .NET 9 库中的新增功能

.NET SDK

.NET 9 SDK 引入了 工作负载集,其中所有工作负载都固定在单一特定版本,直到明确更新。 对于工具,dotnet tool install 的新选项允许用户(而不是工具作者)决定是否允许在较新的 .NET 运行时版本上运行工具,而不是工具所面向的版本。 另外:

  • 单元测试具有更好的 MSBuild 集成,使你可以并行运行测试。
  • 默认情况下,NuGet 安全审核在直接包引用和可传递包引用上运行。
  • 默认情况下,终端记录器处于启用状态,并且还改进了可用性。 例如,现在在构建结束时汇总了失败和警告总数。
  • 新的 MSBuild 脚本分析器(“生成检查”)可用。
  • SDK 可以检测和调整 .NET SDK 与 MSBuild 之间的版本不匹配。
  • dotnet workload history 命令显示当前 .NET SDK 安装的工作负载安装和修改的历史记录。

有关详细信息,请参阅 SDK for .NET 9 中的新增功能

AI 构建基块

.NET 9 通过 Microsoft.Extensions.AIMicrosoft.Extensions.VectorData 包引入了统一的 C# 抽象层。 这些抽象可促进与 AI 服务的交互,包括小型和大型语言模型(SLA 和 LLM)、嵌入、矢量存储和中间件。

.NET 9 还包括扩展 AI 功能的新张量类型。 TensorPrimitives 和新的 Tensor<T> 类型通过启用对多维数据的高效编码、操作和计算来扩展 AI 功能。 可以在 System.Numerics.Tensors 包的最新版本中找到这些类型。

TensorPrimitives

  • 扩展了方法范围:重载从 40 个增加到近 200 个,现在包括与 MathMathFINumber<T> 类似的数值运算,但针对的是值范围。
  • 性能增强:许多操作现在经过 SIMD 优化,以提高性能。
  • 泛型重载:支持实现特定接口的任何类型 T,扩展至超越 .NET 中的浮点值范围。

Tensor<T>

  • 基于 TensorPrimitives 构建,实现高效的数学运算。
  • 使用 AI 库(ML.NET、TorchSharp、ONNX Runtime)进行高效互操作,在可能的情况下实现零拷贝。
  • 使用索引和切片操作实现简单高效的数据操作。
  • 在 .NET 9 中是实验性的。

ML.NET

ML.NET 是一种开源跨平台框架,可将自定义机器学习模型集成到 .NET 应用程序中。

ML.NET 4.0 带来了以下改进:

  • 以编程方式配置 MLContext 选项的新方法。
  • 作为 Stream 加载 ONNX 模型。
  • DataFrame 改进。
  • tokenizers 的新功能。
  • (实验性)Llama 和 Phi 系列模型的 TorchSharp。
  • (实验性)CausalLM 管道 API。

有关详细信息,请参阅 ML.NET中的新增功能。

Tokenizer

Microsoft.ML.Tokenizers 库为 .NET 开发人员提供了对令牌进行编码和解码文本的功能。 对于 AI 方案,使用本地模型时,管理上下文、计算成本和预处理文本非常重要。

最新版本为 tokenizer 引入了重要的新功能:

  • 用于 GPT(3、3.5、4、4o、o1)和 Llam3 模型的 Tiktoken
  • 用于 Llama 和 Mistral 模型的 Llama(基于 SentencePiece)
  • 用于代码生成模型(如 codegen-350M-mono)的 CodeGen
  • 用于 Microsoft Phi2 模型的 Phi2(基于 CodeGen)
  • WordPiece
  • 用于 Bert 支持的模型(如 optimum--all-MiniLM-L6-v2)的 Bert(基于 WordPiece)

.NET Aspire

.NET Aspire 是一组功能强大的工具、模板和包,用于生成可观察的生产就绪应用。.NET Aspire 的最新版本包括对仪表板和资源生命周期管理的改进。 它还增加了新的集成和 API,以便在开发过程中提高灵活性。 .NET Aspire 9 适用于 .NET 9 和 .NET 8 应用。 有关详细信息,请参阅 .NET Aspire 9中的新增功能。

ASP.NET Core

默认情况下,使用 .NET 9 构建的 ASP.NET Core 应用是安全的,扩展了对提前编译的支持,并改进了监视和跟踪。 通过性能改进,你将看到更高的吞吐量和更快的启动时间,以及所有内存使用量较少的情况。 .NET 9 中的 ASP.NET Core 包括:

  • 使用自动指纹版本控制在生成和发布时优化了静态文件的处理(如 JavaScript 和 CSS)。
  • Blazor:新的混合和 Web 应用模板、组件渲染模式检测、服务器渲染的全新重新连接体验。
  • API:内置支持使用 Microsoft.AspNetCore.OpenAPI 的 OpenAPI 文档生成支持,增强的本地 AOT 支持。
  • 使用用于身份验证和授权的新 API 提高了安全性。
  • 更轻松地在 Linux 上设置受信任的开发证书,以便在开发过程中启用 HTTPS。

这只是 .NET 9 中的一些功能和增强功能。 有关详细信息,请参阅 ASP.NET Core 9.0中的新增功能。

.NET MAUI

.NET 9 中的 .NET 多平台应用 UI(.NET MAUI)的重点是增强性能和可靠性,以及桌面和移动应用程序的更深入集成。 .NET MAUI 包括适用于 iOS 和 Mac Catalyst 的 CollectionViewCarouselView 的全新更高效实现、对现有控件的更新、新的应用生命周期事件,以及原生 AOT 和裁剪优化,以改进应用的大小和启动时间。 另外:

  • 新的 TitleBar 桌面控件适用于 Windows。
  • 新的 HybridWebView 控件可更轻松地从 ReactJS、Vue.js和 Angular 等框架中包含已启用 JavaScript 的内容。
  • Entry 现在支持其他键盘模式。
  • 如果可能,控件处理程序会自动与其控件断开连接。
  • MainPage 已被弃用,建议通过重写 Application.CreateWindow(IActivationState) 类来设置应用的主页面。

有关这些新功能等的详细信息,请参阅 .NET MAUI for .NET 9中的新增功能。

EF Core

Entity Framework Core 包括对 Azure Cosmos DB for NoSQL 的数据库提供程序的重大更新。 除其他改进外,它还包括一些实现 AOT 编译和预编译查询的步骤。 有关详细信息,请参阅 EF Core 9 中的新增功能

C# 13

C# 13 随 .NET 9 SDK 一起提供,并包含以下新功能:

  • params 集合
  • 新的 lock 类型和语义
  • 新的转义序列 - \e
  • 方法组自然类型改进
  • 对象初始值设定项中的隐式索引器访问
  • 在迭代器和异步方法中启用 ref 局部变量和 unsafe 上下文
  • 启用 ref struct 类型来实现接口
  • 允许 ref 结构类型作为泛型中类型参数的参数。
  • 现在,partial 类型中允许部分属性和索引器。
  • 重载解析优先级允许库作者将一个重载指定为比其他重载更好。

此外,C# 13 还增加了预览功能:field 支持的属性。

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

F# 9

F# 9 随 .NET 9 SDK 一起提供,并包含以下新功能:

  • 可为空引用类型
  • 区分并集 .Is* 属性
  • 部分活动模式可以返回布尔而不是单元选项
  • 提供参数时,优先选择扩展方法而非内部属性
  • 空主体计算表达式
  • 允许哈希指令采用非字符串参数
  • 扩展 fsi 中的 #help 指令,以便在阅读-求值-输出循环(REPL)中展示文档
  • 允许 #nowarn 在错误代码上支持 FS 前缀以禁用警告
  • 关于非递归函数或 let-bound 值的 TailCall 属性的警告
  • 执行属性目标
  • 集合的随机函数
  • C# 集合表达式对 F# 列表和集合的支持
  • 各种开发人员工作效率、性能和工具改进

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

Windows Presentation Foundation

.NET 9 中的 WPF 为生成具有多个主题增强功能的新式应用提供了增强的支持,等等:

  • 支持 Windows Fluent 主题。
  • 添加了对 Windows 浅色和深色模式的主题支持。
  • 主题现在支持 Windows Accent 颜色。
  • 改进了字体呈现,以支持连字符连接。
  • 不再支持 BinaryFormatter

有关详细信息,请参阅 WPF for .NET 9中的新增功能。

Windows 窗体

.NET 9 中的 WinForms 支持新主题、异步开发的增强功能等:

  • 现在,FormTaskDialog 支持 ShowDialogAsync。 (实验性功能)
  • 不再支持 BinaryFormatter
  • 试验性支持在 Windows 支持的深色模式下呈现应用程序。
  • FolderBrowserDialogToolStrip 进行了一些细微的改进。
  • System.Drawing 库进行了许多改进,包括包装 GDI+ 效果、对 ReadOnlySpan的支持以及更好的互操作代码生成。

有关详细信息,请参阅 .NET 9 的 Windows 窗体中的新增功能

另请参阅