.NET 11 Preview 7 发布:一大波硬核更新来袭,离正式版又近了一步! - 张善友

.NET 11 Preview 7 发布:一大波硬核更新来袭,离正式版又近了一步! - 张善友

💡 原文中文,约6600字,阅读约需16分钟。
📝

内容提要

.NET 11 Preview 7发布,新增C#带标签的break/continue、联合类型改进,dotnet CLI默认启用NativeAOT提速5倍,Blazor支持自动暂停和输出缓存,ZIP加密,新增Decimal32/64/128类型,EF Core查询优化,以及Passkeys API等。这是正式版前最后一次大更新,预计11月发布。

🔎

延伸解读

预览特性需谨慎使用

本文提到的C#带标签的break/continue、联合类型等均为预览特性,需在项目中显式启用<LangVersion>preview</LangVersion>才能使用。这意味着这些功能在正式版发布前可能仍有调整,不适合直接用于生产环境。建议开发者在个人项目或实验性代码中先行体验,待正式版发布后再评估是否引入到关键业务中。

CLI性能提升的代价

dotnet CLI默认启用NativeAOT后,命令执行速度提升5倍,但这是通过跳过第二次CoreCLR启动实现的。目前build、run、test等依赖MSBuild的命令仍走托管CLI,且部分功能可能受影响。若遇到兼容性问题,可通过设置环境变量DOTNET_CLI_ENABLEAOT=false回退到旧行为。升级前建议在CI环境中充分测试,确保工具链稳定。

Blazor自动暂停的适用场景

Blazor Interactive Server新增的自动暂停功能,可在浏览器标签页切到后台时释放服务器资源,但需注意其触发条件:默认隐藏延迟为2分钟,且用户输入、视频播放或JS互操作进行时会自动延后暂停。该功能适合后台任务较少的应用,若页面有长时间运行的操作,需评估暂停是否会影响用户体验。

破坏性变更需提前规划

本预览版包含多项破坏性变更,如Virtualize API的InitialIndex改名为InitialItemIndex、压缩选项WindowLog改名WindowLog2、EditContext.Validate标记过时等。升级到.NET 11正式版前,务必查阅官方发布说明中的Breaking changes部分,并针对受影响代码进行适配。特别是依赖旧API的项目,需预留足够时间进行迁移测试。

Q&A

.NET 11 Preview 7 有哪些重要的新特性?

.NET 11 Preview 7 包含多项重要更新:C# 新增带标签的 break/continue 和联合类型改进;dotnet CLI 默认启用 NativeAOT 提速 5 倍;Blazor 支持自动暂停和输出缓存;ZIP 加密支持;新增 Decimal32/64/128 类型;EF Core 查询优化;以及 Passkeys API 等。

C# 带标签的 break/continue 是什么?如何使用?

带标签的 break/continue 允许在嵌套循环中直接跳出外层循环或跳到外层循环的下一次迭代。使用标签(如 outer:)标记外层循环,然后使用 break outer; 或 continue outer;。该特性目前是预览特性,需要设置 <LangVersion>preview</LangVersion> 才能使用。

dotnet CLI 的 NativeAOT 加速是什么?如何启用或禁用?

dotnet CLI 的 NativeAOT 加速是默认启用的,通过跳过第二次 CoreCLR 启动来提升命令执行速度,实测可提速 5 倍。要禁用,可以设置环境变量 DOTNET_CLI_ENABLEAOT=false。

Blazor 的自动暂停功能是什么?如何配置?

Blazor 的自动暂停功能允许在浏览器标签页切换到后台时自动暂停电路,释放服务器资源,用户切回时再恢复。需要引入 Microsoft.AspNetCore.Components.Server.AutoPause 包,并在 MapRazorComponents 中配置 WithBrowserOptions,设置 HiddenDelay 等参数。

.NET 11 新增的 Decimal32/64/128 类型有什么特点?

Decimal32、Decimal64、Decimal128 分别提供 7、16、34 位十进制精度,采用 IEEE BID 编码,支持无穷大和 NaN,并完整接入泛型数学接口 IDecimalFloatingPointIeee754<TSelf>。它们与 System.Decimal 不同,适用于金融和科学计算。

EF Core 在 .NET 11 Preview 7 中有哪些查询优化?

EF Core 在查询翻译方面有显著改进,包括 int.Parse 转换为 CAST、GroupBy 和 First 的 LEFT JOIN 优化、处理 null 值时的异常改进等。这些优化不少来自社区贡献。

Passkeys Essentials API 支持哪些平台?如何使用?

Passkeys Essentials API 支持 Android 14+、iOS 16+、Mac Catalyst 16+ 和 Windows 10 1903+。使用 Passkeys.IsSupported 检查支持,然后调用 Passkeys.CreateAsync 注册,Passkeys.AssertAsync 登录。

.NET 11 Preview 7 中有哪些破坏性变更需要注意?

破坏性变更包括:Virtualize API 的 InitialIndex 改名为 InitialItemIndex;压缩选项中的 WindowLog 改名为 WindowLog2;EditContext.Validate 标记为过时;--no-build 不再隐式构建项目引用;CSRF 中间件只验证显式 opt-in 的端点。升级前建议查看官方发布说明。

🏷️

标签

➡️

继续阅读