
微软发布 .NET 11,改进 C# 15、ASP.NET Core 与 .NET MAUI
来源标题:.NET 11
微软正式发布 .NET 11,包含数百项运行时优化和响应更快的 SDK 工具,并改进 C# 15、ASP.NET Core、.NET MAUI 与 Windows 开发体验。C# 15 成为面向 .NET 11 项目的默认语言版本,新增联合类型(union types)等特性。产品团队将在 11 月 10 日至 11 日的 .NET Conf 2026 上介绍新版本。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
今天,我们很高兴地宣布 .NET 11 正式发布!今年的版本让构建现代应用变得更快、更高效,并在 C# 15、ASP.NET Core、.NET MAUI 和 Windows 开发方面带来了全面改进。凭借数百项运行时优化、响应更快的 SDK 工具以及日常命令中更少的开销,你可以少花时间等待,多花时间创造。构建更丰富的 Web 和跨平台应用,利用新的 C# 语言特性,并通过改进的工具和智能体能力探索 AI 驱动的开发。
在 .NET Conf 2026 上,与产品团队和社区一起探索 .NET 11。大会包括 11 月 10 日和 11 日的产品团队会议,随后是两天的社区会议。
观看第一天的直播(包括主题演讲),或浏览大会会议播放列表。
以下是我们最期待你尝试的一些变化:
.NET 11 中的新特性概览链接到完整详情。以下是这些头条背后的变化以及如何开始使用它们。
C# 15 是面向 .NET 11 的项目的默认语言版本。联合类型是其最大的新增功能之一:一个值可以是声明的一组 case 类型之一,支持从这些类型进行转换,并在 switch 表达式中进行穷尽性检查。
考虑一个产品查找场景,它要么找到产品,要么报告未找到:
ProductLookup result = new Product(42, "Mechanical keyboard"); string message = result switch { Product product => $"Found {product.Name}", ProductNotFound missing => $"No product with ID {missing.Id}", }; Console.WriteLine(message); public sealed record Product(int Id, string Name); public sealed record ProductNotFound(int Id); public union ProductLookup(Product, ProductNotFound);
result 类型告诉调用方需要处理哪些结果。无需仅仅为了将这些结果放在一个返回类型下而使用 object 或不相关的基类。
C# 15 还增加了封闭层次结构。封闭类将直接派生限制在其声明程序集内,为编译器提供检查层次结构模式所需的信息。当你想要组合现有类型时,联合类型很有用;封闭层次结构适合你拥有继承关系的模型。
较小的语言特性也有助于日常代码。集合表达式参数让你可以传递构造函数或工厂参数,而无需放弃集合表达式语法:
HashSet<string> names = [with(StringComparer.OrdinalIgnoreCase), "Alice", "ALICE", "Bob"]; Console.WriteLine(names.Count);
这会输出 2:比较器控制相等性,因此 "Alice" 和 "ALICE" 是一个条目。
其他新增功能包括扩展索引器以及带标签的 break 和 continue。这些功能不需要预览语言版本。单独的内存安全工作仍处于预览阶段;有关其选择加入要求,请参阅 C# 15 功能文档。
F# 11 改进了编译器内存使用,并减少了 FSharp.Core 集合操作中的分配。它还增加了限制并发异步工作的方式,当集合操作否则会启动超过服务或机器舒适处理能力的工作时,这很有用。
F# 发行说明区分了默认语言更新和预览功能,包括对自定义计算表达式构建器的 Runtime Async 支持。
SDK 现在默认启用 Native AOT CLI 宿主。诸如 help 和 version 查询之类的命令可以在不启动托管 CLI 的情况下运行,工具启动也可以避免该启动路径。需要托管执行的命令仍然使用它。
MSBuild 服务器在 CLI 调用之间也默认保持热状态,减少了重复的启动工作。Linux 和 macOS 上的 SDK 安装程序通过程序集去重变得更小。
基于文件的应用可以通过 #:include 跨源文件增长,解决方案筛选器可以从 CLI 创建和编辑。dotnet watch 增加了 Aspire 应用宿主集成、崩溃恢复以及移动项目的设备选择。
对于使用 Microsoft.Testing.Platform 的团队,dotnet test 获得了运行级超时、失败限制、更清晰的进度报告以及按模块的结果目录。测试运行器很重要:这些开关不能与 VSTest 命令行选项互换。
容器发布通过 SOURCE_DATE_EPOCH 添加可重现的镜像摘要,并在目标清单已存在时避免冗余层上传。NuGet 源配置增加了最低包发布年龄设置,让团队可以等待新发布的包版本变为可选中。这是一项额外的策略控制,不能替代漏洞检查或审查依赖项。
有关命令示例和配置,请参阅 SDK 和工具中的新特性。
.NET 11 中的性能工作既涉及你部署的代码,也涉及你用于开发它的工具。Stephen Toub 的 .NET 11 性能改进详细介绍了数百项运行时和库优化,并附有基准测试和代码示例。
即时 (JIT) 编译器改进消除了更多冗余边界检查和分支,改进了去虚拟化,并将更多操作折叠为常量。例如,当 JIT 在编译时知道输入时,它可以优化额外的 SequenceEqual 调用。这些更改改进了生成的代码,而无需你重写相应的应用程序逻辑。
Native AOT 接口调度使用共享辅助程序,减少了接口调用点所需的代码,并提高了接口密集型工作负载的吞吐量。硬件支持也扩展了,包括在支持的 x64 和 Arm64 硬件上为 Half 操作提供 FP16 指令,以及新的向量构造和组合 API。
诊断方面也有有用的工作。进程内崩溃报告日志可以在进程退出前捕获托管堆栈跟踪、模块信息和运行时状态。以前在移动平台上可用,此报告路径现在也支持 Linux 和 macOS。
(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。