
微软正式发布了 .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 扩展即可。

RC1 最重要的信号之一:面向 .NET 11 的项目,默认语言版本就是 C# 15。整个预览周期里打磨的语言特性全部转正:
break / continue以前想表达"一个方法可能返回成功或失败",要么搞异常,要么手写 OneOf 风格的包装类。现在原生支持,而且不再需要 <LangVersion>preview</LangVersion>:
public record Success(string Message);
public record Failure(int ErrorCode);
public union Result(Success, Failure);
static string Describe(Result result) => result switch
{
Success(var message) => message,
Failure(var errorCode) => $"Error {errorCode}"
};写过嵌套循环的人,谁没为了跳出外层循环搞过 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; // 直接跳出外层循环!
}
}
}内存安全规则(updated-memory-safety-rules)这一版补齐了几块拼图:await 现在可以出现在 unsafe 上下文里;safe 关键字可以标注在 LibraryImport 这类生成代码上;而给委托、静态构造函数、析构函数标 unsafe 则会直接报错——因为它们本来就不构成有意义的 unsafe 上下文。
Process 终于原生支持发送 POSIX 信号和检查终止状态了,不用再绕 SafeProcessHandle:
using System.Diagnostics;
using System.Runtime.InteropServices;
if (OperatingSystem.IsLinux() || OperatingSystem.IsMacOS())
{
using Process process = Process.Start("sleep", "30")!;
process.Signal(PosixSignal.SIGTERM);
ProcessExitStatus status = await process.WaitForExitStatusAsync();
Console.WriteLine(status);
}ProcessExitStatus 能区分"正常退出"和"被信号干掉",做进程管理的同学狂喜。
Preview 7 引入的 Dns.ResolveSrv、ResolveMx、ResolveTxt、ResolveCName 等强类型 DNS API(当时仅 Windows 实现),这一版 Linux 也安排上了,基于平台解析器配置,还支持自定义 DNS 服务器列表。微服务和服务发现场景实用性拉满。
System.Text.Json 内置了 BFloat16、Decimal32、Decimal64、Decimal128 的转换器(反射和源生成都支持)。同时 JSON 基础设施完成了对 C# union 类型的支持——通过结构分类器,可以按"区分属性"自动判断该反序列化成 union 的哪个 case:
[JsonUnion(TypeClassifier = typeof(JsonUnionTypeStructuralClassifier))]
public union PetUnion(Dog, Cat);另外,封闭类型层级的多态序列化现在可以通过 [JsonPolymorphic(InferClosedTypePolymorphism = true)] 按类型逐个开启,库作者不用强迫使用者改全局 JsonSerializerOptions 了。
配置验证支持异步了:实现 IAsyncValidateOptions<TOptions>,启动时就能做"DNS 解析得通才算配置合法"这类检查。相应地,IStartupValidator 被标记过时,由 IAsyncStartupValidator 接替。
BitArray 可以直接从 ReadOnlySpan<bool/byte/int> 构造——Arm64 基准快 33~51%,布尔输入的分配最多降低 89%DeflateEncoder、GZipDecoder 等无流编解码器新增 Reset(),处理多个载荷不用反复分配AesGcm、ChaCha20Poly1305 走 CryptoKit 空 AAD 快速路径,16 字节小载荷加密提速约 25%Aes 新增 RFC 3394 无填充 Key Wrap 支持(JOSE 库常用)还有一个实验性大招:System.Net.Security 提供了调用方驱动的非阻塞 TLS 状态机(TlsBufferSession / TlsSocketSession),应用自己控制缓冲区和 I/O 调度——做高性能网络中间件的可以关注,注意 API 带 SYSLIB5007 实验诊断。
Half 运算用上 FP16 硬件指令:半精度浮点操作在支持的芯片上直接硬加速回顾整个 .NET 11 周期,运行时的"头号工程" Runtime Async(运行时原生异步)已经从 Preview 1 一路打磨到反超传统状态机模型:异步方法进入分层编译后,TechEmpower JSON 基准预热阶段的分配速率暴降 92%;热路径 await 内联后循环一亿次从 191ms 降到 32ms。再加上 CoreCLR on WebAssembly 已能端到端跑完整个运行时库测试套件——Blazor WebAssembly 换上 CoreCLR 的日子越来越近了。
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),供应链审计友好单文件 app.cs 的 Native AOT 启动路径现在能复用已有构建产物——没改代码就不用重编译。dotnet format app.cs 也可以直接格式化单文件应用了。
文件夹模式下,dotnet format 只沿"将被格式化的文件"的祖先目录查找 .editorconfig,不再扫描 node_modules 这种无关子树。某 monorepo 基准里,格式化单个文件从 1.09 秒降到 0.55 秒。
[Obsolete] 标记的 API,并且可以为构建期 OpenAPI 生成选择环境回望 Preview 7 里那些大货——Blazor 电路自动暂停省电、CacheView SSR 输出缓存、五个新 Blazor 分析器(BL0012~BL0016)、验证体系本地化内置——都已在 RC1 中趋于稳定。
dotnet test 的设备测试)、控件与平台功能完善、XAML 改进;跨平台 Passkey、XAML 增量热重载、ASP.NET Core 风格的 Shell 路由模板等 Preview 7 重磅特性全部带上升级提醒:RC1 仍有几处值得注意的破坏性变更——
decimal 与二进制浮点之间的转换改为"精确值一次舍入"。double 字面量 1.23 转 decimal 不再恰好得到 1.23,且没有兼容开关——依赖旧结果的测试和序列化数据需要更新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 仓库发布说明。