.NET 11 Preview 5 已经发布了。虽然它还不是正式版,但从这次更新可以看出,微软正在继续把 .NET 往几个方向推进:Web 开发更顺手,C# 语言表达能力更强,基础类库更贴近真实业务场景,运行时性能也继续在底层打磨。简单说,这不是一次“看起来很炫”的更新,而是一次很工程化、很实用的更新。
一、ASP.NET Core:Blazor 和 Minimal API 继续补齐真实项目能力
ASP.NET Core 这部分,重点基本都围绕 Blazor、表单验证、OpenAPI、Kestrel 这些实际开发中经常碰到的点展开。比如 Blazor SSR 现在支持客户端验证,也就是说表单输入错误时,不一定非要等服务器返回,浏览器端就能马上给用户反馈。这个体验对用户来说更自然,对开发者来说也更接近传统 MVC 或前端框架里的表单体验。
另外,Blazor 还增强了异步表单验证能力。这个很好理解,比如注册用户名时,要去数据库或者远程 API 检查“用户名是否已经存在”,这种验证天然就是异步的。以前这类场景写起来会比较绕,现在框架开始提供更明确的支持。
本次还加入了验证错误本地化能力,Blazor 表单和 Minimal API 都可以更方便地根据不同语言返回错误信息。对于做国际化系统的人来说,这个很实用。比如一个系统既支持中文用户,也支持日文用户,表单错误提示就不应该全部写死成英文。
QuickGrid 也有一个比较接地气的变化:即使页面不是交互式渲染,排序和分页也能工作。它会通过 URL 查询参数来保存状态,而不是依赖点击事件。这意味着页面更轻,链接也更容易分享。
还有 Blazor WebAssembly Gateway,它替代了旧的 WebAssembly DevServer,本质上是让本地开发服务器更像一个真正的 ASP.NET Core Host。尤其是 SPA 路由刷新问题,比如直接访问 /orders/42,现在处理会更自然,不需要开发者额外写很多 fallback 逻辑。
Kestrel 方面也增强了安全性,对 HTTP/2 和 HTTP/3 的 trailer header 增加超时保护,避免连接长时间挂着不结束。OpenAPI 生成也更准确,特别是 enum、数组 schema、多种响应类型这些地方。总体来看,ASP.NET Core 这次不是在堆新概念,而是在解决真实项目里的细节问题。
二、C#:语言开始更关注“状态建模”和“类型安全”
C# 这次更新里,最值得注意的是 closed class hierarchies 和 union declarations。简单说,C# 正在变得更适合表达“有限状态”和“有限类型集合”。
closed class 可以理解成“封闭继承体系”。比如一个门的状态只有“关闭”和“打开”两种,那基类就可以声明为 closed,编译器就知道它的直接子类只能在同一个程序集里定义。这样在写 switch 表达式时,编译器可以帮你检查是不是所有情况都处理到了。这个能力对状态机、业务流程、领域模型都很有价值。
union declarations 则更进一步。它允许你定义一个 union 类型,这个类型的值只能是几个固定类型之一。比如 Pet 可以是 Dog,也可以是 Cat。这样你在代码里表达“这个值只能是这些类型之一”就更直接,不需要手写一堆包装类或者复杂继承结构。
这类特性对业务系统其实很重要。很多业务问题本质上都是“状态有限,但处理分支很多”。比如订单状态、支付结果、审核流程、Agent 执行结果,都很适合用这种方式建模。代码不只是能跑,还能让编译器帮你兜底,减少遗漏分支的风险。
Unsafe Evolution 这部分则偏底层。它的方向是让 unsafe 的边界更清楚:不是所有出现指针的地方都必须包在 unsafe 上下文里,而是把 unsafe 重点放到真正危险的操作上,比如解引用非托管内存,或者调用明确标记为 unsafe 的成员。这对普通业务开发者影响不大,但对写高性能库、底层组件、Interop 代码的人来说,会让代码表达更精确。
整体来看,C# 这次更新的关键词是:类型表达力更强,编译器能帮开发者做更多检查。对于大型项目来说,这比单纯少写几行代码更有意义。
三、.NET Libraries:基础类库继续向真实业务靠近
类库更新这部分非常实用,很多都是平时写业务代码会直接用到的能力。
首先是 System.Text.Json 支持 JSON Lines 序列化。JSON Lines 很常见,每一行都是一个独立 JSON 对象,特别适合日志、消息流、批处理数据、AI 数据集处理等场景。以前你可能要自己一行一行写,现在框架层面直接支持
IAsyncEnumerable<T>
输出 JSON Lines,这对流式数据处理很方便。
LINQ 也加入了 FullJoin,也就是完整外连接。这个对做数据对账、数据同步、库存核对、配置比对非常有用。比如左边是一份商品目录,右边是一份销售记录,你既想看到匹配上的数据,也想看到左边有但右边没有、右边有但左边没有的数据,FullJoin 就很自然。
EqualityComparer 增加 key-selector 创建能力,这类更新看起来小,但能减少很多样板代码。你可以更方便地告诉比较器:“我不是直接比较整个对象,而是按照某个字段来比较。”
Random 增加了泛型数值 API,StringBuilder 可以在不复制的情况下转移 chunk,这些都属于提升性能和易用性的基础能力。普通开发者未必每天关注,但框架和高性能库会受益。
网络、加密、反射、Options Validation、Syndication 等也都有更新。比如加密部分加入 X25519 key agreement,反射可以暴露 nullable underlying type,Options 验证可以接受 validator 类型。这些能力不会让你第一眼觉得惊艳,但它们会在具体项目里减少很多绕路代码。
所以类库这部分的价值可以概括成一句话:.NET 正在把很多开发者过去需要自己封装的小工具、小技巧,逐步沉淀到标准库里。
四、Runtime:性能优化继续往底层打磨
Runtime 这部分最核心的关键词还是性能,尤其是 async、JIT、GC、Arm、WebAssembly 等方向。
这次 runtime-async suspension 和 resumption 继续变快。通俗点说,就是异步方法在挂起和恢复时,运行时做的事情更少、路径更短、开销更低。对于大量使用 async/await 的应用来说,这种优化很关键。现在的 Web API、数据库访问、消息队列、网络 IO,基本都离不开异步,所以底层优化会自然影响上层应用。
JIT 方面也有不少优化。比如它能删除更多不必要的 Span 范围检查和 null 检查。开发者代码不用改,但生成的机器码更短、执行路径更干净。这类优化很像“编译器帮你偷偷把代码写得更聪明”。
Arm intrinsics 继续增强,说明 .NET 对 Arm 平台的支持还在推进。现在云服务器、移动设备、边缘计算里 Arm 都越来越常见,所以这不是一个小众方向。
GC 也继续做 trimming 和 compaction 改进。简单理解,就是内存管理更精细,运行时更努力地减少浪费、提升稳定性。对于长期运行的服务端应用来说,GC 的表现直接影响延迟、吞吐和资源成本。
Browser/WebAssembly CoreCLR enablement 也值得关注。WebAssembly 方向意味着 .NET 继续在浏览器、跨平台运行场景上投入。它不是所有业务都马上用得上,但代表 .NET 运行时边界还在扩大。
Runtime 的更新一般没有 Web 框架或语言特性那么直观,但它很重要。因为它决定了所有 .NET 应用的底层表现。你写的代码没有变化,但升级运行时后,可能就会得到更好的性能、更低的开销和更稳定的行为。
总结:.NET 11 Preview 5 更像是一次“工程质量升级”
整体看下来,.NET 11 Preview 5 不是单点爆炸式更新,而是从 Web 框架、语言、类库、运行时四个层面一起推进。
ASP.NET Core 让 Web 开发更顺手,特别是 Blazor 和 OpenAPI 更贴近真实项目。C# 开始强化状态建模和类型安全,让复杂业务表达更清楚。类库继续补齐高频工具能力,比如 JSON Lines、FullJoin、比较器、随机数、加密等。Runtime 则继续在异步、JIT、GC、Arm、WebAssembly 上做底层优化。
如果你是业务开发者,最值得关注的是 ASP.NET Core 和 Libraries。它们会直接影响你日常写代码的体验。如果你做框架、基础设施、高性能服务,那 C# 新特性和 Runtime 优化更值得深入研究。
一句话总结:.NET 11 Preview 5 不是为了“炫技”,而是在让 .NET 更适合真实工程、更适合大型项目,也更适合未来跨平台、高性能、云原生的开发场景。
声明:来自硅基-桂迹,仅代表创作者观点。链接:https://eyangzhen.com/8562.html