惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Blog — PlanetScale
Blog — PlanetScale
J
Java Code Geeks
N
Netflix TechBlog - Medium
Martin Fowler
Martin Fowler
A
About on SuperTechFans
腾讯CDC
B
Blog RSS Feed
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Microsoft Azure Blog
Microsoft Azure Blog
D
Docker
Y
Y Combinator Blog
Microsoft Security Blog
Microsoft Security Blog
F
Fortinet All Blogs
I
InfoQ
博客园 - 【当耐特】
美团技术团队
GbyAI
GbyAI
量子位
宝玉的分享
宝玉的分享
爱范儿
爱范儿
有赞技术团队
有赞技术团队
博客园 - Franky
L
LangChain Blog
阮一峰的网络日志
阮一峰的网络日志

博客园 - 张善友

纯 .NET 手写 CUDA kernel,GLM-5.3-Flash decode 跑出 llama.cpp 的 2 倍 3 张卡到底能不能跑大模型推理?从 vLLM、llama.cpp 到 TensorSharp 的多卡真相 AI 编程时代,.NET 的机会在哪里? Vibe Coding 月提交量 29 亿次之后:GitHub 的危机、Azure 迁移,以及 .NET 的机会 从 PostgreSQL 到 Kubernetes:开源的护城河,从来不写在代码里 人工智能最先替代的,是人工智能学院自己 企业架构的六种场景:从"四大流派"到数字原生与 AI 原生 TensorSharp 最新进展研究报告:从 DeepSeek V4 Flash 到 GLM-5.2,以及等待中的 GLM-5.3 Google 官方下场安利:Go 是 AI 时代的"理想语言"?其实 C# 更有资格坐这个位置 当"入门第一课"的作者开始 Vibe Coding:廖雪峰 2026 上半年 AI 编程实践深度探索 两种 Harness 哲学:从 DeepSeek Harness 的"过度抽象"争议,看 OpenClaw.NET 的另一种答案 JVMGuard 来了,.NET 开发者别慌:你的 dotnet-monitor 早就准备好了 Agent 系统的不确定性治理:当软件工程遭遇"梯度下降" WorkBuddy 专家团的下一步:用 MetaSkill 把「提示词约定」升级为「运行时硬约束」 改变世界的17个方程,如何重塑 GoodCrew 的架构哲学 修 Bug 的手艺与架构的艺术:从熵增到熵减 "从"前锋"到"中场":为什么 Agent 基础设施的建设者必须是系统思考者" 纯 C# 追平 llama.cpp?.NET 本地推理三国杀 MCP 第五版 × OpenClaw.NET:从协议升级到生态编排 把 284B 的 DeepSeek V4 Flash 装进纯 .NET:TensorSharp 用一天改写了 .NET 推理栈的位置 从DDD到Ontology:当数字员工不再认"限界上下文"这堵墙 从 Harness 引擎到 MetaSkill DAG 的确定性架构 25家巨头联名的那封公开信,为什么数字员工架构师应该逐字读一遍 AI + C# NativeAOT:破解应用开发的"最后一公里" 本体:AI落地的"企业翻译官" C# MCP SDK 2.0 即将发布:去会话化、去握手、去运维噩梦 数字员工的成本账:OpenClaw.NET 如何用工程化实现"成功任务的单位经济学"(下) AI 成本战的隐性成本与降本五层:从"成功率悖论"到"系统复杂度"(中) 从 Token 价格战到成功任务单位经济学:AI 成本战的真正主线(上) MCP + A2A 融合:协议层已就绪,信任层才是硬仗
.NET 11 Preview 7 发布:一大波硬核更新来袭,离正式版又近...
张善友 · 2026-08-12 · via 博客园 - 张善友

就在北京时间2026-08-12 凌晨,微软正式发布了 .NET 11 Preview 7。按照往年的节奏,这基本是新版本发布前最后一个大规模塞新特性的预览版了——接下来就是 RC,然后 11 月正式发布。

这一版的分量相当足:C# 终于迎来了带标签的 break/continuedotnet CLI 换上了 NativeAOT 引擎直接提速 5 倍,Blazor 学会了"摸鱼省电"(自动暂停电路)和输出缓存,ZIP 文件终于支持密码了……

下面挑重点给大家捋一遍。


一、C# 15:千呼万唤的 labeled break/continue 来了

带标签的 break 和 continue

写过嵌套循环的人,谁没为了跳出外层循环搞过 bool found = false 这种 flag 大法?现在不用了:

string? foundValue = null;
outer: for (int x = 0; x < xMax; x++)
{
    for (int y = 0; y < yMax; y++)
    {
        if (GetValue(x, y) is { } value && value == target)
        {
            foundValue = value;
            break outer;   // 直接跳出外层循环!
        }
    }
}

continue 同样支持标签,可以直接跳到外层循环的下一次迭代。Java 程序员表示:欢迎,等你很久了。

Union 类型持续进化

C# 的联合类型(preview 特性)这次改用了 Try-Both 匹配策略:模式匹配时先对 union 实例本身匹配,失败后再匹配内部包裹的值。另外 switch 表达式现在能理解"泛型参数被约束到 closed 类型"的场景——只要封闭基类的所有子类型都被覆盖,编译器就不再报"非穷尽"警告:

public closed record class Shape;
public record class Circle(double Radius) : Shape;
public record class Square(double Side) : Shape;

static double Area<T>(T shape) where T : Shape => shape switch
{
    Circle(var r) => Math.PI * r * r,
    Square(var s) => s * s    // 不再警告,编译器知道 T 玩不出新花样
};

提醒:union、labeled break/continue 等都还是预览特性,需要 <LangVersion>preview</LangVersion> 开启。


二、运行时:Runtime Async 继续狂飙

Runtime Async(运行时原生异步)是 .NET 11 的"头号工程",这一版又压榨出不少性能:

  • 异步方法进入分层编译(Tiered Compilation):以前异步方法永远跑 Tier0 代码,现在能正常走 Tier0→Tier1 流水线。TechEmpower platform-json 基准测试中,预热阶段的最大分配速率从 1.1 亿 B/s 暴降到 800 万 B/s,降幅超过 92%。
  • JIT 内联 TransparentAwait:对已完成的 Task 做热 await,从辅助调用折叠成一次状态标志位检查——循环 await 一亿次的耗时从 191ms 降到 32ms
  • Task/ValueTask 工厂方法内建识别Task.FromResultValueTask.CompletedTask 等直接被 JIT 折叠成快速路径;TaskValueTask 之间的包装转换也能被拆包,某场景下生成代码从 115 字节缩到 29 字节。
  • await Task.Yield() 去掉了线程池装箱分配:循环 1000 万次从 723ms 降到 534ms,追平了传统状态机模型。

CoreCLR on WebAssembly:里程碑达成

Preview 6 里 CoreCLR 跑在 WASM 上还只能"开机",Preview 7 已经可以端到端跑完整个运行时库测试套件了。背后是异常处理迁移到标准化的 exnref 提案、RyuJIT 点亮了大部分 PackedSimd 指令、新增 WASI 宿主等一连串工作。Blazor WebAssembly 用上 CoreCLR 的日子越来越近了。

JIT 其他亮点

  • 新增 AVX-VNNI V512 硬件内建指令支持
  • Arm64 上 PopCount / TrailingZeroCount 编译成单条 cnt/ctz 指令
  • Activator.CreateInstance<T>() 的结果现在可以被去虚拟化,后续虚调用直接内联
  • Arm64 SVE 下 Vector<T> 不再被限制在 128 位
  • 修复了一个存在已久的坑:float/double 到小整数类型的未检查转换现在正确饱和(以前 (short)32768.0 会得到 -32768……)

NativeAOT

  • 泛型虚方法(GVM)分发改走 dispatch cell:单态调用从 2.45ns 降到 1.74ns
  • ILC 编译提速:dotnet new webapiaot 模板编译从 7.4s 降到 6.2s
  • Arm64 指针认证(PAC-RET)支持落地,ROP 攻击更难了
  • Assembly.GetCallingAssembly() 在 NativeAOT 下可用了(但需要堆栈跟踪数据)

三、基础库:一堆"终于等到你"

IEEE 754 十进制浮点三兄弟

System.Numerics 新增 Decimal32Decimal64Decimal128,分别提供 7、16、34 位十进制精度。和 System.Decimal 不同,它们采用 IEEE BID 编码、支持无穷大和 NaN,并且完整接入泛型数学(IDecimalFloatingPointIeee754<TSelf>)。金融计算、科学计算多了新选择。

ZIP 终于支持密码了!

是的,2026 年了,System.IO.Compression 终于可以读写加密的 ZIP 条目了,支持 ZipCrypto 和 AES-128/192/256:

using var archive = ZipFile.Open("secrets.zip", ZipArchiveMode.Create);
ZipArchiveEntry entry = archive.CreateEntry(
    "notes.txt",
    password: "correct horse battery staple",
    encryptionMethod: ZipEncryptionMethod.Aes256);

同时还新增了 ZipFileCreationOptions / ZipExtractionOptions 批量操作选项和全套异步 API。

HTTP 请求压缩与智能连接淘汰

  • 新增 GZipCompressedContentBrotliCompressedContentZstandardCompressedContent 三个 HttpContent 包装器,上行请求体也能压缩了。
  • SocketsHttpHandler 新增实验性回调 ShouldEvictConnection:以前为了让 HttpClient 感知 DNS 变更,只能粗暴设置 PooledConnectionLifetime 定期回收所有连接;现在可以只在 DNS 真的变了的时候才踢掉旧连接,健康连接不再被误杀。

类型化 DNS 解析 API

Dns.ResolveSrvResolveMxResolveTxtResolveCName 等全新 API 上线,返回强类型记录。目前仅 Windows 实现(基于 DnsQueryEx),其他平台后续预览版补上。

System.Text.Json:封闭层级自动多态

开启 InferClosedTypePolymorphism 后,C# closed 类型层级不再需要手写 [JsonDerivedType],序列化器自动发现派生类型并分配判别符。

其他值得知道的

  • Complex<T> 泛型复数类型:可以用 floatHalfBFloat16 甚至新的 Decimal128 做复数运算
  • string.ToUpperOrdinal() / ToLowerOrdinal():与 OrdinalIgnoreCase 配套的区域性无关大小写转换,和"土耳其 i 问题"说再见
  • ChangeToken.OnChange 支持 Func<Task> 异步回调,配置文件热重载不再跑 async void
  • HybridCache 工厂回调可感知上下文:根据算出来的结果动态调整过期时间和本地缓存大小
  • System.IO.Pipelines 降低读写竞争:56 核机器上 ASP.NET Core JSON 基准的锁竞争从每秒 483 次降到 66 次
  • ⚠️ 注意Math.Round 多位数重载现在严格精确舍入,约 5% 的输入会得到和之前不同的(但正确的)结果

四、SDK:dotnet CLI 换上 NativeAOT 引擎

NativeAOT CLI 默认开启

这可能是你每天都能感知到的变化:dotnet 命令行的 AOT 快速路径从 Preview 6 的实验选项变成默认开启。实测数据:

  • dotnet tool list:378ms → 68ms(快 5.5 倍)
  • dotnet dev-certs httpsdotnet ef 等工具调度命令:约 700ms → 200ms 左右(快 3 倍多)

原理是跳过了第二次 CoreCLR 启动。想退回老行为?DOTNET_CLI_ENABLEAOT=false 即可。目前 buildruntestpackpublish 等依赖 MSBuild 的命令仍走托管 CLI,后续会继续迁移。

MSBuild Server 默认开启

后台常驻一个"热乎"的 MSBuild 工作进程,连续的 dotnet build / dotnet test 不用重复启动 MSBuild。老行为可通过 DOTNET_CLI_USE_MSBUILD_SERVER=false 恢复。

dotnet test 全面加强

  • 新增运行级 --timeout 90s--maximum-failed-tests 5(跑挂 5 个就止损)
  • 支持直接对 Microsoft.Build.Traversal 项目跑测试
  • --list-tests json 输出结构化测试清单,方便工具消费
  • 多模块运行自动合并 TRX 和覆盖率产物
  • 获得 MAUI 设备测试能力:--list-devices 发现设备、--device 先部署再测试

文件化应用(File-based Apps)更顺手

dotnet reference add --file app.cs MyLib/MyLib.csproj 可以直接往 .cs 文件里插入 #:project 指令,单文件应用引用项目不用再手敲了。

容器发布

优先使用平台原生容器运行时——Windows 上用 wslc,macOS 上用 container,Docker 和 Podman 退居备选。


五、ASP.NET Core 与 Blazor:省电、缓存、更聪明

Blazor 电路自动"摸鱼"

Interactive Server 模式下,当浏览器标签页被切到后台,电路可以自动暂停释放服务器资源,用户切回来再恢复。引入 Microsoft.AspNetCore.Components.Server.AutoPause 包:

app.MapRazorComponents<App>()
    .AddInteractiveServerRenderMode()
    .WithBrowserOptions(options =>
    {
        options.AddAutoPause(pause =>
        {
            pause.HiddenDelay = TimeSpan.FromSeconds(30); // 默认 2 分钟
        });
    });

很贴心的是,如果用户正在输入、视频正在播放、或者有进行中的 JS 互操作,暂停会自动延后,不会丢数据。

CacheView:SSR 输出缓存

新组件 CacheView 可以缓存服务端渲染子树的 HTML 输出,命中缓存时内部组件完全不实例化,直接回放 HTML:

<CacheView ExpiresAfter="TimeSpan.FromMinutes(10)"
           VaryByRoute="productId"
           VaryByQuery="page,pageSize"
           VaryByCulture="true">
    <ExpensiveProductSummary ProductId="productId" />
</CacheView>

支持绝对/滑动过期、按路由/查询字符串/请求头/Cookie/用户/区域文化等多维度缓存键;注册了 HybridCache 还会自动升级为两级缓存。AuthorizeViewQuickGrid 这类依赖每请求状态的组件有内置标注,放错位置会给出明确的报错提示。

五个新的 Blazor 分析器

BL0012~BL0016 默认开启,专治各种常见坑:多余的 StateHasChanged() 调用、忘了订阅认证状态变更、for 循环变量被闭包捕获、非 public 的 [JSInvokable]、没包 try/catch 的 JS 互操作调用。

验证体系大完善

  • ValidatableTypeAttribute / SkipValidationAttribute 摘掉实验标签
  • 验证消息内置本地化:注册 IStringLocalizerFactory 即自动生效,不再需要单独的 Localization 包
  • Blazor SSR 客户端验证的 CSS 类名和行为与交互式 Blazor 完全对齐

其他

  • OpenAPI 3.2 支持用 itemSchema 描述 SSE(Server-Sent Events)流的事件结构
  • SignalR .NET 客户端支持重定向后的认证刷新(为 Azure SignalR 铺路)
  • 可通过 ITlsConnectionFeature 读取 TLS 通道绑定令牌,防中继攻击
  • QuickGrid 新增 InitialItemIndexScrollToItemAsync(虚拟化模式下)
  • wasm-tools 升级到 Emscripten 6

六、EF Core:查询翻译大丰收

这一版 EF Core 的查询翻译改进相当亮眼,而且不少来自社区贡献:

  • int.Parse 等解析方法可翻译为 SQL Server CAST,不再被迫客户端求值
  • GroupBy 聚合穿越导航属性g.Max(o => o.Customer.Region) 从"每组一次相关子查询"回归为单条 LEFT JOIN + GROUP BY,修掉了一个 EF Core 7 时代的性能回退
  • GroupBy + 每组取 First 之后还能继续组合查询(以前直接报翻译失败)
  • LEFT JOIN 无匹配行时,匿名类型/DTO 投影正确产出 null 而不是抛 Nullable object must have a value
  • Cosmos DB Provider 全面现代化:物化器改用 Utf8JsonReader彻底告别 Newtonsoft.Json,查询重试也纳入执行策略
  • SQLite 支持 Half 类型;PMC 的 Add-Migration/Update-Database 支持 -NoBuild

⚠️ 注意:Microsoft.Data.Sqlite 不再支持 netstandard2.0(也就是不再支持 .NET Framework),最低目标框架为 net10.0


七、.NET MAUI:Passkey、增量热重载、Shell 路由模板

跨平台 Passkey 认证

新的 Passkeys Essentials API 一套代码驱动 Android 14+、iOS 16+、Mac Catalyst 16+、Windows 10 1903+ 的原生 Passkey 界面:

if (Passkeys.IsSupported)
{
    var credential = await Passkeys.CreateAsync(optionsJson);  // 注册
    var assertion = await Passkeys.AssertAsync(optionsJson);   // 登录
}

XAML 增量热重载(预览特性)

基于源生成器 + MetadataUpdateHandler不重建应用就能更新已实例化的页面,Debug 构建默认开启。

Shell 路由模板

Shell 路由用上了 ASP.NET Core 风格的路径参数,支持必填、可选、默认值、约束和 catch-all:

Routing.RegisterRoute("product/{sku}", typeof(ProductDetailPage));
await Shell.Current.GoToAsync("//products/product/seed-tomato");

其他

  • {RelativeSource AncestorType=...} 绑定编译为 AOT 安全的 TypedBinding
  • iOS/Mac Catalyst 上 NavigationPage、TabbedPage 切换到 Handler 架构
  • 第三方平台后端扩展点开放(GTK、macOS、WPF 社区后端可以正式接入了)
  • Android FastDeploy2 成为默认,热增量部署最少只需 3 个串行 adb 操作
  • dotnet watch 热重载支持通过 USB/Wi-Fi 连接真机 iOS/tvOS 设备
  • IPA 默认携带 *.symbols,App Store Connect 崩溃报告自动符号化

八、F# 也有份

  • 计算表达式里 let 右侧现在可以直接写 let!/use!/do!(以前报 FS0750)
  • 递归模块/命名空间内的特性(Attribute)可以正常解析
  • 无负载结构联合体的 StructLayout 尺寸修正

九、上手方式

⚠️ 升级提醒:本版有一些破坏性变更,比较值得注意的包括——Preview 6 的 Virtualize API 改名(InitialIndexInitialItemIndex)、压缩选项里的 WindowLog 统一改名 WindowLog2EditContext.Validate 标记过时、--no-build 不再隐式构建项目引用、CSRF 中间件只验证显式 opt-in 的端点等。升级前建议先过一遍官方发布说明的 Breaking changes 部分。


写在最后

Preview 7 基本就是 .NET 11 正式版前最后一次"大放送"了。纵观整个 .NET 11:Runtime Async 从 P1 一路打磨到现在反超状态机模型,CoreCLR 即将登陆 WebAssembly,CLI 全面 NativeAOT 化,C# 补上了 labeled break/continue 和 union 类型——这个 11 月的 STS 版本,诚意十足。

你最期待哪个特性?欢迎在评论区聊聊。

本文内容整理自微软官方 .NET 博客及 dotnet/core 仓库发布说明。