.NET 11 RC1 发布:C# 15 转正,联合类型引发争议

宾果软件 . 发布于 2026-09-20 09:30:48 . 阅读 6

微软发布了 .NET 11 Release Candidate 1,这是 .NET 11 开发周期的首个候选发布版本。该版本附带 Go-Live 支持许可,因此团队可以将其用于生产应用。公告指出,.NET 11 RC1 受到新版 Visual Studio 2026 Insiders 支持,也可在安装 C# Dev Kit 的 Visual Studio Code 中使用。


对于以 .NET 11 为目标的项目,RC1 将 C# 15 设为默认语言版本。根据 C# 发行说明,该版本将预览周期中加入的功能转为稳定版,包括集合表达式参数、联合类型、非虚静态接口成员、封闭类层次结构、带标签的 break 和 continue,以及扩展索引器。


联合类型不再需要启用预览语言设置。Roslyn 现在使用最终确定的 CSharp15 名称,另有一个新 API 可向分析器公开联合类型的各个分支。Unsafe Evolution 仍是需要单独启用标志的预览功能;RC1 允许在 unsafe 上下文中使用 await。


F# 11 也成为默认语言版本。记录展开和直接构造委托已转为稳定功能。字符串插值现在会编译为 String.Concat,而不是基于反射的 printf 引擎。F# 发行说明称,这使它能够与裁剪和 Native AOT 配合使用。该版本还为记录和联合类型增加了无需反射的 ToString 输出,支持 inheritdoc 和 include 文档标签,并新增 Async.RunSynchronouslyImmediate 函数


在 SDK 中,dotnet test 现在可以运行以 Android、iOS、macOS 和 Mac Catalyst 为目标的测试项目,并为各平台提供新的项目模板。新的运行级选项可设置超时时间、在失败达到指定次数后停止运行,并为每个测试应用分配独立的结果目录。


据 SDK 发行说明介绍,设置 SOURCE_DATE_EPOCH 后,容器发布可以在不同构建中生成具有相同摘要的镜像;如果目标注册表中已存在镜像清单,它还会跳过上传。


ASP.NET Core 最终确定了服务器端和 .NET 客户端的 SignalR 身份验证刷新 API,并为 TypeScript 客户端增加了同样的支持。Blazor Server 会话现在无需重新连接,就能采用刷新后的身份信息。


OpenAPI 文档会将已过时的操作、类型和属性标记为弃用;验证消息本地化则从预览 API 转向资源名称约定。该版本指出,Device Bound Session Credentials 软件包仍处于实验阶段,并将在整个 .NET 11 周期内保持预发布状态。


.NET MAUI 将 dotnet test 扩展至移动端和桌面端目标,同时为 TabbedPage 增加角标,并加入显式的 SwipeItem 颜色、适配主题的启动画面,以及 MAUI 发行说明所描述的更快、体积更小的 Android 构建


Reddit 讨论中的社区反应大多着眼于实际使用。多名开发者表示,将现有代码库迁移到 .NET 11,只需安装 SDK 并对项目文件做少量修改。一位评论者称,Go-Live 许可已足以让他们将容器投入生产环境。


另一位评论者表示,封闭类层次结构是他们离开长期支持版本路线的原因。主要批评集中在联合类型上:多名评论者指出,联合类型无法通过 System.Text.Json 完成序列化与反序列化的往返处理,因为序列化输出不包含类型判别字段。微软 .NET 团队的 Jon Galloway 在讨论中回复称,发布文章列出的是相对于上一个预览版的变化,而不是相对于 .NET 10 的变化。


该版本的其他变化包括:dotnet format 支持基于文件的程序、Negotiate 身份验证支持 TLS 通道绑定,以及最终确定了 Blazor 浏览器选项的名称


感兴趣的读者可以在 GitHub 仓库中查看 SDKC#F#ASP.NET Core.NET MAUI 的完整发行说明。