.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 中,新方法 CountBy 和 AggregateBy 使可以通过键聚合状态,而无需通过 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.AI 和 Microsoft.Extensions.VectorData 包引入了统一的 C# 抽象层。 这些抽象可促进与 AI 服务的交互,包括小型和大型语言模型(SLA 和 LLM)、嵌入、矢量存储和中间件。
.NET 9 还包括扩展 AI 功能的新张量类型。 TensorPrimitives 和新的 Tensor<T> 类型通过启用对多维数据的高效编码、操作和计算来扩展 AI 功能。 可以在 System.Numerics.Tensors 包的最新版本中找到这些类型。
TensorPrimitives
- 扩展了方法范围:重载从 40 个增加到近 200 个,现在包括与
Math
、MathF
和INumber<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 的 CollectionView 和 CarouselView 的全新更高效实现、对现有控件的更新、新的应用生命周期事件,以及原生 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 支持新主题、异步开发的增强功能等:
- 现在,
Form
和TaskDialog
支持ShowDialogAsync
。 (实验性功能) - 不再支持
BinaryFormatter
。 - 试验性支持在 Windows 支持的深色模式下呈现应用程序。
FolderBrowserDialog
和ToolStrip
进行了一些细微的改进。- System.Drawing 库进行了许多改进,包括包装 GDI+ 效果、对
ReadOnlySpan
的支持以及更好的互操作代码生成。
有关详细信息,请参阅 .NET 9 的 Windows 窗体中的新增功能。
另请参阅
- 我们对 .NET 9 博客文章的愿景
- ASP.NET Core 9.0 中的新增功能
- .NET MAUI 中的新增功能
- EF Core 中的新增功能