微软于 2026 年 2 月 10 日正式发布了 .NET 11 Preview 1,这是继 .NET 10 稳定版之后的首个公开预览版本。本次更新覆盖范围广泛,从底层的运行时、基础库,到上层的应用框架和开发工具,都带来了大量值得关注的新功能和性能优化。
📚 库 (Libraries) 更新
Zstandard 压缩支持
新增对 Zstandard (Zstd) 压缩算法的原生支持。Zstd 由 Facebook 开发,以其高压缩比和速度著称,性能优于传统的 gzip。现在,开发者可以直接通过 .NET API 便捷地进行 Zstd 数据的压缩与解压缩。
BFloat16 浮点类型
引入了 BFloat16 (Brain Floating Point) 数据类型。这种 16 位浮点格式在机器学习领域,尤其是深度学习模型的训练和推理中广泛使用。与标准的 Float16 相比,BFloat16 保留了更大的指数范围,牺牲了部分精度,更适合对数值范围敏感的计算场景。
ZipArchiveEntry 改进
对 ZipArchiveEntry 类进行了功能增强,提供了更灵活的压缩包条目管理能力,包括更好的元数据访问和性能优化。
FrozenDictionary 集合表达式支持
FrozenDictionary 现在支持集合表达式 (Collection Expressions) 语法,你可以使用更简洁的方式来创建不可变字典:
FrozenDictionary<string, int> lookup = [
"apple" => 1,
"banana" => 2,
"cherry" => 3
];
TimeZone 改进
时区处理 API 得到增强,提供了更精确的时区转换和夏令时处理能力,显著改善了开发跨时区应用的体验。
Rune 支持扩展
Rune 类型(用于表示 Unicode 标量值)现在在 String、StringBuilder 和 TextWriter 中获得了一致性的支持,方便开发者处理包含复杂 Unicode 字符(如 emoji 表情)的文本。
新增 MediaTypeMap 工具类,简化了文件扩展名与 MIME 类型之间的映射查找。这个工具在 Web 开发和文件上传等场景中非常实用。
HMAC 和 KMAC 验证 API
提供了新的 HMAC (Hash-based Message Authentication Code) 和 KMAC (Keccak Message Authentication Code) 验证 API,增强了密码学操作的易用性与安全性。
硬链接创建 API
新增了用于创建文件系统硬链接 (hard link) 的 API。硬链接允许多个文件系统条目指向同一份文件数据,适用于版本控制、备份等需要节省存储空间的场景。
DivisionRounding 整数除法模式
新增 DivisionRounding 枚举,支持多种整数除法的舍入模式,如向上舍入、向下舍入、向零舍入和向最近偶数舍入等,为需要精确整数运算控制的场景提供了更细粒度的选项。
Happy Eyeballs 支持
Socket.ConnectAsync 方法现在支持 Happy Eyeballs 算法 (RFC 8305)。该算法在同时尝试 IPv4 和 IPv6 连接时,会自动选择最快的连接方式,从而提升网络连接的可靠性和响应速度。
性能改进
在库层面进行了多项性能优化,包括集合操作、字符串处理、序列化和 I/O 操作的性能提升。
⏱️ 运行时 (Runtime) 更新
Runtime Async
引入了运行时级别的异步支持,改进了垃圾回收 (GC) 和线程调度等底层组件的异步操作能力,有助于减少阻塞,从而提升高并发应用的性能。
CoreCLR on WebAssembly
.NET 的 CoreCLR 运行时现在可以在 WebAssembly 上运行,这是一个重大的技术突破。相比之前仅支持的 Mono 运行时,CoreCLR 提供了更好的性能和更完整的 .NET 功能支持,使得基于 Blazor 的 WebAssembly 应用能够获得接近原生代码的执行速度。
Interpreter Expansion
解释器功能得到了扩展,提供了更完整的 .NET 代码解释执行能力。这对于需要动态代码执行的场景非常有用,例如脚本引擎或热更新系统。
JIT 性能改进
即时编译器 (JIT) 进行了多项深度优化,包括:
- 更好的内联决策
- 改进的循环优化
- 向量化增强
- 更高效的代码生成
这些优化直接提升了应用程序的启动速度和运行时性能。
GC 堆硬限制 (32 位进程)
为 32 位进程引入了 GC 堆硬限制配置选项。开发者可以明确设置垃圾回收器能够使用的最大内存量,有效防止因内存无限增长导致的内存溢出问题。
RISC-V 和 s390x 架构支持
新增对 RISC-V 和 s390x (IBM Z 架构) 的官方支持。这极大地扩展了 .NET 的应用范围,使其能够运行在从嵌入式设备到大型主机系统的更多硬件平台上。
🛠️ SDK 更新
dotnet run:交互式目标框架和设备选择
当执行 dotnet run 命令时,如果项目配置了多个目标框架(如 net11.0, net11.0-android)或设备,SDK 会提供一个交互式选择界面,无需再手动指定 -f 参数:
$ dotnet run
1. net11.0
2. net11.0-android
3. net11.0-ios
Select target framework: _
dotnet test:位置参数
dotnet test 命令现在支持位置参数,可以更简洁地指定要测试的项目或解决方案文件:
dotnet test MySolution.sln --filter “Category=Unit”
dotnet watch:热重载增强
dotnet watch 工具获得了两项重要改进:
- 热重载引用变更:当修改项目引用(如添加新的 NuGet 包)时,工具会自动重新加载应用。
- 可配置端口:允许自定义开发服务器的端口,方便在多个项目间避免端口冲突。
新代码分析器
SDK 集成了新的代码分析器(Analyzer),为开发者提供了更多的编码规范检查和性能优化建议,帮助编写更健壮、高效的代码。
🔨 MSBuild 更新
Terminal Logger 改进
终端日志记录器提供了更清晰的构建输出,改进了进度显示和错误信息的格式,使诊断构建问题更加容易。
MSBuild 语言和评估修复
修复了多个 MSBuild 语言解析和属性评估过程中的 Bug,提高了项目构建的稳定性。
新 API 和功能
为 MSBuild 的扩展开发者提供了新的 API,支持进行更灵活、更强大的构建流程定制。
性能改进
优化了整个构建过程,特别是针对大型解决方案的增量构建性能得到了显著提升。
C# 语言特性
Collection Expression Arguments
集合表达式现在可以直接作为方法参数进行传递,无需先将其赋值给一个显式声明的变量,代码更加简洁:
ProcessItems([1, 2, 3, 4, 5]);
void ProcessItems(int[] items) { }
Extended Layout Support
扩展了内存布局控制的支持,允许开发者对结构体和类的内存排列进行更精细的控制。这项特性对于需要与原生代码互操作或处于性能关键路径的代码尤为重要。
F# 语言特性
并行编译默认启用
F# 编译器现在默认启用并行编译,对于大型 F# 项目而言,这将显著缩短编译等待时间。
计算表达式编译优化
针对大量使用计算表达式 (computation expressions) 的代码进行了编译速度优化,有效减少了编译时间。
新编译器标志
--disableLanguageFeature:用于禁用特定的语言特性,主要用于兼容性测试场景。
--typecheck-only:在 FSI (F# Interactive) 中仅执行类型检查,而不实际执行代码。
ML 兼容性移除
移除了对传统 ML 语言的兼容性支持,简化了编译器的内部实现。
Visual Basic
在 Preview 1 中,Visual Basic 没有引入新的语言特性或破坏性变更,主要工作集中于质量改进和 Bug 修复。
🌐 ASP.NET Core & Blazor 更新
EnvironmentBoundary 组件
新增 <EnvironmentBoundary> 组件,允许在 Blazor 应用中明确标记运行环境的边界(服务器端或客户端),从而更好地控制组件的渲染行为。
Label 组件用于表单
Blazor 新增了 <Label> 组件,为表单提供了更好的可访问性支持:
<Label For=“userName”>用户名</Label>
<InputText @bind-Value=“userName” id=“userName” />
DisplayName 组件
新增 <DisplayName> 组件,能够自动从模型元数据中提取显示名称,进一步简化了表单开发的代码量。
QuickGrid OnRowClick 事件
QuickGrid 组件新增了 OnRowClick 事件,支持响应行的点击交互:
<QuickGrid Items=“products” OnRowClick=“HandleRowClick”>
<!— columns —>
</QuickGrid>
相对导航 RelativeToCurrentUri
Blazor 的导航服务新增了 RelativeToCurrentUri 选项,支持相对于当前页面 URL 进行导航,简化了单页应用 (SPA) 中的路由逻辑。
为交互式服务器组件提供了 ConfigureConnection API,允许开发者自定义 SignalR 连接的配置细节,例如超时设置、重连策略等。
IHostedService 支持 Blazor WebAssembly
Blazor WebAssembly 应用现在支持 IHostedService 接口。这意味着你可以在客户端浏览器环境中运行后台服务,轻松实现定时任务、数据轮询等功能。
OpenAPI 二进制文件响应支持
OpenAPI 架构生成器现在能够正确处理二进制文件响应类型(例如文件下载接口),并自动生成正确的 application/octet-stream 架构描述。
IOutputCachePolicyProvider
新增 IOutputCachePolicyProvider 接口,允许动态地提供输出缓存策略,实现了更灵活、更强大的缓存控制机制。
WSL 中自动信任开发证书
在 WSL (Windows Subsystem for Linux) 开发环境中,用于 HTTPS 的开发者证书现在可以被自动信任,无需再手动执行繁琐的配置命令。
📱 .NET MAUI 更新
XAML 源代码生成默认启用
.NET MAUI 现在默认启用 XAML 源代码生成。这项技术将 XAML 文件在编译时转换为 C# 代码,能够显著提升应用的启动速度和运行时的性能表现。
.NET for Android
CoreCLR 默认启用
面向 Android 平台的应用现在默认使用 CoreCLR 运行时(替代了之前的 Mono 运行时),这带来了显著的性能提升和更优的内存使用效率。
dotnet run 增强
dotnet run 命令针对 Android 应用进行了特别优化,支持更快的部署和更流畅的调试体验。
Preview 1 中,Windows Forms 主要集中于质量改进和 Bug 修复,没有引入重大的新功能。
🖥️ Windows Presentation Foundation (WPF)
同样以质量改进为主,重点修复了在 Windows 10 操作系统上使用 Fluent 设计风格的窗口背景和 backdrop 时遇到的一些显示问题。
🎁 Entity Framework Core 更新
TPT/TPC 继承的复杂类型和 JSON 列
对于使用 TPT (Table Per Type) 或 TPC (Table Per Concrete Type) 继承映射策略的实体类型,现在支持映射复杂类型和 JSON 列,提供了更丰富的数据建模能力。
一步创建和应用迁移
新的命令简化了数据库迁移的工作流,允许在单个步骤中完成迁移文件的创建并立即将其应用到数据库:
dotnet ef migrations add-and-update InitialCreate
Azure Cosmos DB 改进
事务批处理
支持 Cosmos DB 的事务批处理 API,允许在单个事务原子操作中执行多个读写操作。
批量执行
新增了批量执行支持,可以显著提升大量数据写入 Cosmos DB 时的性能。
会话令牌管理
改进了会话令牌 (session token) 的管理机制,提供了更好的一致性控制和性能优化。
📦 容器镜像
Preview 1 没有引入新的容器镜像特性,继续沿用和完善 .NET 10 中建立的容器化最佳实践。
🚀 开始使用
想要体验 .NET 11 Preview 1,请访问 .NET 11 下载页面 安装 SDK。
开发工具
总结
.NET 11 Preview 1 在性能、开发体验和跨平台支持等多个维度都带来了扎实的改进:
- 性能提升:CoreCLR on WebAssembly、JIT 深度优化、F# 并行编译等。
- 新功能涌现:Zstandard 压缩、BFloat16 类型(与机器学习场景紧密相关)、HMAC/KMAC API 等。
- 开发体验优化:SDK 交互式选择、热重载增强、MAUI XAML 源码生成等。
- 架构支持扩展:新增 RISC-V、s390x 支持,WebAssembly 能力大幅增强。
- 应用框架增强:ASP.NET Core 新增实用组件、EF Core 对 Cosmos DB 的支持更加完善。
作为首个预览版本,建议开发者们在测试环境中积极尝试这些新特性,并向 .NET 团队反馈使用体验。.NET 11 的正式版预计将于 2026 年 11 月发布。对此次更新细节的深入探讨,欢迎前往 云栈社区 的 .NET 技术板块与其他开发者交流。
相关链接: