微软正式发布了 .NET 11 的第一个候选发布版本(Release Candidate 1)。
和之前的 Preview 不同,RC1 附带了 go-live 支持许可证——这意味着你可以放心地把它用在生产环境,遇到问题能获得官方支持。按照惯例,接下来就是 RC2,然后 11 月正式 GA。作为 STS(标准期限支持)版本,.NET 11 将获得 2 年支持。
工具链方面,.NET 11 RC1 由全新的 Visual Studio 2026 Insiders提供支持,VS Code 用户则搭配最新的C# Dev Kit扩展即可。
这一版都有哪些新东西?挑重点给大家捋一遍。一、C# 15 正式转正,不用再开 preview 开关了RC1 最重要的信号之一:面向 .NET 11 的项目,默认语言版本就是 C# 15。整个预览周期里打磨的语言特性全部转正:
联合类型(union types)带标签的 break/continue集合表达式参数(collection expression arguments)
非虚静态接口成员
封闭类层级(closed hierarchies)
扩展索引器
Union 类型毕业以前想表达"一个方法可能返回成功或失败",要么搞异常,要么手写 OneOf 风格的包装类。现在原生支持,而且不再需要 :
publicrecordSuccess(string Message);publicrecordFailure(int ErrorCode);publicunionResult(Success, Failure);staticstringDescribe(Result result)=> result switch{Success(var message)=> message,Failure(var errorCode)=>$"Error {errorCode}"};带标签的 break/continue写过嵌套循环的人,谁没为了跳出外层循环搞过 bool found = false的 flag 大法?现在可以直接:
outer:for(int x =0; x < xMax; x++){for(int y =0; y < yMax; y++){if(GetValue(x, y)== target){break outer;// 直接跳出外层循环!}}}Unsafe Evolution 继续打磨(仍为预览特性)内存安全规则(updated-memory-safety-rules)这一版补齐了几块拼图:await现在可以出现在unsafe上下文里;safe关键字可以标注在LibraryImport这类生成代码上;而给委托、静态构造函数、析构函数标unsafe则会直接报错——因为它们本来就不构成有意义的 unsafe 上下文。
二、基础库:跨平台能力大补课进程信号与退出状态Process终于原生支持发送 POSIX 信号和检查终止状态了,不用再绕SafeProcessHandle:
usingSystem.Diagnostics;usingSystem.Runtime.InteropServices;if(OperatingSystem.IsLinux|| OperatingSystem.IsMacOS){usingProcess process = Process.Start("sleep","30")!;process.Signal(PosixSignal.SIGTERM);ProcessExitStatus status =await process.WaitForExitStatusAsync;Console.WriteLine(status);}ProcessExitStatus能区分"正常退出"和"被信号干掉",做进程管理的同学狂喜。
Linux 上的类型化 DNS 解析Preview 7 引入的 Dns.ResolveSrv、ResolveMx、ResolveTxt、ResolveCName等强类型 DNS API(当时仅 Windows 实现),这一版Linux 也安排上了,基于平台解析器配置,还支持自定义 DNS 服务器列表。微服务和服务发现场景实用性拉满。
JSON:新数值类型 + Union 序列化System.Text.Json内置了BFloat16、Decimal32、Decimal64、Decimal128的转换器(反射和源生成都支持)。同时 JSON 基础设施完成了对 C# union 类型的支持——通过结构分类器,可以按"区分属性"自动判断该反序列化成 union 的哪个 case:
[JsonUnion(TypeClassifier =typeof(JsonUnionTypeStructuralClassifier))]publicunionPetUnion(Dog, Cat);另外,封闭类型层级的多态序列化现在可以通过 [JsonPolymorphic(InferClosedTypePolymorphism = true)]按类型逐个开启,库作者不用强迫使用者改全局JsonSerializerOptions了。
异步选项验证配置验证支持异步了:实现 IAsyncValidateOptions,启动时就能做"DNS 解析得通才算配置合法"这类检查。相应地,IStartupValidator被标记过时,由IAsyncStartupValidator接替。
小而美的改进 BitArray可以直接从ReadOnlySpan构造——Arm64 基准快 33~51%,布尔输入的分配最多降低 89%DeflateEncoder、GZipDecoder等无流编解码器新增Reset,处理多个载荷不用反复分配Unix 上支持 TLS channel binding 校验,为 ASP.NET Core 的 Negotiate 认证扩展保护(Extended Protection)铺路
Apple 平台上 AesGcm、ChaCha20Poly1305走 CryptoKit 空 AAD 快速路径,16 字节小载荷加密提速约 25%Aes新增 RFC 3394 无填充 Key Wrap 支持(JOSE 库常用)
还有一个实验性大招:System.Net.Security提供了调用方驱动的非阻塞 TLS 状态机(TlsBufferSession/TlsSocketSession),应用自己控制缓冲区和 I/O 调度——做高性能网络中间件的可以关注,注意 API 带SYSLIB5007实验诊断。
三、运行时 Unix 进程内崩溃报告:崩溃时能从进程内部直接产出诊断信息
Half运算用上 FP16 硬件指令:半精度浮点操作在支持的芯片上直接硬加速
回顾整个 .NET 11 周期,运行时的"头号工程" Runtime Async(运行时原生异步)已经从 Preview 1 一路打磨到反超传统状态机模型:异步方法进入分层编译后,TechEmpower JSON 基准预热阶段的分配速率暴降 92%;热路径await内联后循环一亿次从 191ms 降到 32ms。再加上 CoreCLR on WebAssembly 已能端到端跑完整个运行时库测试套件——Blazor WebAssembly 换上 CoreCLR 的日子越来越近了。
四、SDK 与 CLIdotnet test 全面加强RC1 的 dotnet test(Microsoft.Testing.Platform 路径)新增两组运行级控制(放在--之前对整个运行生效):
# 整个测试运行最多 90 秒dotnet test--timeout 90s# 挂 5 个就止损dotnet test --maximum-failed-tests 5移动测试也支棱起来了:支持 Android、iOS、macOS、Mac Catalyst 目标,可以选择真机、模拟器,还有配套的 dotnet new androidtest/iostest等模板。多模块运行时可以用--results-directory-layout per-module防止同名报告互相覆盖。
容器发布:可复现 + 跳过冗余上传 设置 SOURCE_DATE_EPOCH后,相同输入的多次发布会产出相同的镜像摘要(digest),供应链审计友好推送到远端仓库前会先检查 manifest 是否已存在,已存在则跳过层处理只打标签,重复推送快得多
文件化应用(File-based Apps)继续进化单文件 app.cs的 Native AOT 启动路径现在能复用已有构建产物——没改代码就不用重编译。dotnet format app.cs也可以直接格式化单文件应用了。
dotnet format 提速文件夹模式下,dotnet format只沿"将被格式化的文件"的祖先目录查找.editorconfig,不再扫描node_modules这种无关子树。某 monorepo 基准里,格式化单个文件从 1.09 秒降到 0.55 秒。
五、ASP.NET Core SignalR 认证刷新 API 定型:服务端 API 和 TypeScript 客户端双双支持认证刷新,Blazor Server 电路在认证刷新后也会自动更新——为 Azure SignalR 等场景铺路
OpenAPI 会如实反映 [Obsolete]标记的 API,并且可以为构建期 OpenAPI 生成选择环境
Negotiate 认证使用 TLS channel binding(配合前面提到的 Unix 端支持),防中继攻击
回望 Preview 7 里那些大货——Blazor 电路自动暂停省电、CacheViewSSR 输出缓存、五个新 Blazor 分析器(BL0012~BL0016)、验证体系本地化内置——都已在 RC1 中趋于稳定。
六、MAUI 与桌面端 .NET MAUI:RC1 聚焦测试能力(对接 dotnet test的设备测试)、控件与平台功能完善、XAML 改进;跨平台 Passkey、XAML 增量热重载、ASP.NET Core 风格的 Shell 路由模板等 Preview 7 重磅特性全部带上 Windows Forms:新增 kiosk(信息亭)模式管理能力, 现代视觉风格(Modern visual styles)在 RC1 正式稳定七、上手方式下载 .NET 11 SDK(RC1):https://dotnet.microsoft.com/download/dotnet/11.0
Windows 用户推荐搭配 Visual Studio 2026 Insiders;VS Code 用户安装最新C# Dev Kit想看新特性演示,可以蹲每周的 .NET 社区 standup 和 .NET Unboxed 直播
升级提醒:RC1 仍有几处值得注意的破坏性变更——
数值转换严格正确舍入:decimal与二进制浮点之间的转换改为"精确值一次舍入"。double字面量1.23转decimal不再恰好得到1.23,且没有兼容开关——依赖旧结果的测试和序列化数据需要更新HTTP 高基数指标改为可观测仪表:直接用MeterListener的代码需要调用RecordObservableInstruments才能收到open_connections、active_requests的测量值Configuration环境变量成为 CLI 默认值 :脚本里如果设置了环境变量Configuration,dotnet build/test会默认采用它而不是Debug,需要时显式传--configuration Debug升级前建议通读一遍官方发布说明的 Breaking changes 部分。
写在最后从 Preview 1 到 RC1,.NET 11 的拼图基本完整了:Runtime Async 反超状态机模型、CoreCLR 登陆 WebAssembly、CLI 全面 NativeAOT 化(dotnet tool list快 5.5 倍)、C# 15 补齐 union 和 labeled break/continue、ZIP 加密、Blazor 省电摸鱼……
RC1 拿到 go-live 许可,意味着正式版已没有悬念,只剩抛光。这个 11 月的 STS 版本,诚意十足。
你最期待哪个特性?欢迎在评论区聊聊。
本文内容整理自微软官方 .NET 博客及 dotnet/core 仓库发布说明。