微软发布 .NET 11:C# 15 引入联合类型,SDK 内置 MCP 服务器模板
Announcing .NET 11
微软发布 .NET 11,这是支持两年的 STS 版本,C# 15 成为默认语言版本并引入联合类型与封闭层级。SDK 新增 MCP 服务器模板,配合 Microsoft.Extensions.AI 和 Microsoft Agent Framework 构建智能体应用,Runtime Async 仍为预览功能。.NET 8 和 .NET 9 将于 2026 年 11 月 10 日结束支持。
今天,我们很高兴地宣布 .NET 11 正式发布!今年的版本让构建现代应用变得更快、更高效,并在 C# 15、ASP.NET Core、.NET MAUI 和 Windows 开发方面带来了诸多改进。借助数百项运行时优化、响应更快的 SDK 工具,以及日常命令中更少的开销,你可以减少等待时间,把更多时间用于创造。构建更丰富的 Web 和跨平台应用,利用新的 C# 语言特性,并通过改进的工具和智能体能力探索 AI 驱动的开发。
.NET 11 支持
.NET 11 是标准期限支持(STS)版本,根据 .NET 支持政策提供两年支持。STS 和长期支持(LTS)版本具有相同的质量和服务政策;区别在于支持时长。.NET 10 仍是受支持的 LTS 选项。无论选择哪个版本,都请通过服务更新保持最新。
欢迎参加 11 月 10 日至 13 日的 .NET Conf
与产品团队和社区一起在 .NET Conf 2026 上探索 .NET 11。大会包括 11 月 10 日和 11 日的产品团队会议,随后是两天的社区会议。
观看 第一天直播,包括主题演讲,或浏览 大会会议播放列表。
宣布 .NET 11
.NET 11 中的新功能
以下是我们最期待你尝试的一些变化:
- C# 15 联合类型和封闭层次结构可帮助你表达应用的可能状态,并使用编译器检查的模式处理它们。
- Native AOT CLI 主机和热 MSBuild 服务器减少了日常开发工作流中的开销。
- ASP.NET Core 带来了异步验证、OpenAPI 3.2,以及 Blazor 和 SignalR 应用的新能力。实验性 Blazor AI 组件与 Agent User Interaction Protocol(AG-UI)集成,以实现高级智能体 Web 体验。
- 使用 Microsoft.Extensions.AI(MEAI)进行模型访问、MCP 进行工具集成、Microsoft Agent Framework(MAF)进行智能体和工作流,构建 AI 驱动的智能体应用。
- 让智能体开发工具发挥作用:使用 .NET Skills 获取 .NET 特定指导,使用 .NET MAUI DevFlow 检查和测试正在运行的应用,使用 .NET Upgrade 画布查看现代化进度。
- .NET MAUI 采用 CoreCLR 作为默认运行时,并改进了 XAML 迭代和原生控件。
- 这些库新增了内置 Zstandard 压缩、更简单的进程执行、更丰富的 JSON 支持,以及无需先复制即可处理内存中数据的新方法。
.NET 11 新功能概述链接到完整详情。以下是这些头条背后的变化以及如何开始使用它们。
语言
C# 15
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);结果类型告诉调用方需要处理哪些结果。无需使用 object 或无关的基类,仅仅为了将这些结果放在一个返回类型后面。
C# 15 还新增了封闭层次结构。closed 类将直接派生限制在其声明程序集内,从而为编译器提供检查该层次结构上模式所需的信息。当你想要组合现有类型时,联合类型很有用;封闭层次结构则适用于你拥有继承关系的模型。
一些较小的语言特性也有助于日常代码编写。集合表达式参数让你可以传递构造函数或工厂参数,而无需放弃集合表达式语法:
HashSet<string> names =
[with(StringComparer.OrdinalIgnoreCase), "Alice", "ALICE", "Bob"];
Console.WriteLine(names.Count);这会打印 2:比较器控制相等性,因此 "Alice" 和 "ALICE" 是同一个条目。
其他新增内容包括扩展索引器以及带标签的 break 和 continue。这些特性不需要预览语言版本。单独的内存安全工作仍处于预览阶段;有关其选择加入要求,请参阅 C# 15 功能文档。
F# 11
F# 11 改进了编译器内存使用,并减少了 FSharp.Core 集合操作中的分配。它还新增了限制并发异步工作的方式,当集合操作原本会启动超过服务或机器舒适处理能力的工作时,这很有用。
F# 发行说明区分了默认语言更新与预览功能,包括对自定义计算表达式构建器的 Runtime Async 支持。
平台
SDK
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。
一如既往,请在你的应用上实测效果。吞吐量、启动时间、内存占用和部署大小取决于工作负载和你选择的发布选项。
Runtime Async 一直是 .NET 11 各预览版中反复出现的主题。它将异步挂起和恢复移入运行时,而不再依赖编译器生成的状态机。
一个特别有用的结果是更清晰的实时调用堆栈。分析器和调试器可以显示异步方法本身,而不是用于执行它们的底层基础设施。这与异常堆栈跟踪不同,后者已经隐藏了大部分此类基础设施。
Runtime Async 仍是预览功能。要在面向 net11.0 的项目中试用它,请添加:
<PropertyGroup>
<Features>runtime-async=on</Features>
</PropertyGroup>此场景无需启用 EnablePreviewFeatures。.NET 运行时库本身已使用 Runtime Async 构建,但让应用代码选择加入新的编译模型是另一项独立选择。有关其行为和当前指南,请参阅 Runtime Async 文档,并在采用前测试应用的依赖项和诊断功能。
AI 库和工具
.NET 11 SDK 包含一个 MCP 服务器模板。MCP 为 AI 应用提供了一种发现和调用工具与服务的通用方式。该模板使用官方 MCP C# SDK,并包含一个可用的示例工具,因此你无需先安装单独的模板包即可开始公开自己的功能:
dotnet new mcpserver -o MyMcpServer对于使用 AI 服务的应用,Microsoft.Extensions.AI (MEAI) 提供了 IChatClient 和 IEmbeddingGenerator 等抽象。这些库让你可以使用熟悉的 .NET 模式,将模型访问与依赖注入、缓存和 OpenTelemetry 组合起来。它们以 NuGet 包的形式提供,而不是要求你将所有应用代码迁移到新框架版本的功能。
Microsoft Agent Framework (MAF) 在这些抽象之上构建,提供可调用工具并维护对话状态的代理,以及协调代理和应用代码的工作流。将代理连接到 MCP 工具,使其能够访问应用的功能,并通过 ASP.NET Core AG-UI 端点公开代理,以构建交互式 Blazor 体验。AG-UI 托管集成目前处于预发布阶段。
如需动手示例,请从 .NET AI Essentials: The Core Building Blocks Explained 开始,然后继续阅读我们的 Microsoft Agent Framework 演练。
库
.NET 库新增了此前需要额外设置、中间缓冲区或自定义辅助程序才能实现的功能。
Process API 扩展包含一次性方法,用于运行进程并捕获其输出和退出状态。更高级的 API 让你可以控制继承的句柄、挂起启动和进程信号。构建工具和开发者实用程序可以在进程管道上花费更少的代码,同时仍能检查子进程是如何结束的。有关示例,请参阅 .NET 11 中的进程 API 改进。
Zstandard 压缩加入了 System.IO.Compression 中现有的压缩格式。新的基于 span 的压缩 API 支持自行管理缓冲区的调用方,ZIP 改进包括在读取条目时进行 CRC32 验证。
四个新的内存流适配器将现有数据桥接到接受 Stream 的 API:ReadOnlyMemoryStream、WritableMemoryStream、ReadOnlySequenceStream 和 StringStream。例如,管道的分段 ReadOnlySequence<byte> 可以作为流读取,而无需先将其展平为新的连续缓冲区。
System.Text.Json 增加了对 C# 联合、F# 可区分联合以及异步序列的 JSON Lines 输出的支持。F# 联合支持使用反射,不支持源生成、裁剪或 Native AOT,因此在为裁剪应用程序选择它之前,请查看文档中记录的限制。
LINQ 新增了 FullJoin,它保留两个输入中未匹配的元素。这对于对账工作很有用,例如比较两个清单,你需要查看任一侧缺失的项目。
这些库还扩展了数值类型、DNS 解析、加密和跟踪配置。库概述涵盖了完整的变更集,并标记了仍处于实验阶段的 API。
Entity Framework Core 11
Entity Framework Core 11 改进了模型如何变为查询以及该查询如何变为 SQL。
EF Core 在更多引用导航和拆分查询场景中移除了不必要的联接,改进了 GroupBy 转换,并在支持它的关系提供程序上转换新的 LINQ FullJoin 运算符。这些更改可以简化生成的 SQL,同时让更多查询保留在 LINQ 中。
复杂类型和 JSON 列现在可用于使用每类型表或每具体类型表继承映射的实体。其他改进包括迁移工具和额外的提供程序特定 JSON 功能。
对于 SQL Server 应用程序,EF Core 增加了对向量索引和近似向量搜索的支持。SQL Server 功能和相应的 EF API 是实验性的。在评估它们之前,请参阅向量搜索文档和限制。
EF Core 11 需要 .NET 11。升级时,请检查数据库提供程序的兼容性以及 EF Core 11 重大变更和运行时变更。
开发者工具
新的 dotnetup 工具链管理器允许你在用户账户中安装和更新 .NET SDK 和运行时。它目前处于公开预览阶段,可帮助你管理并行版本并跟上服务更新。
.NET Skills 为编码代理提供来自 .NET 团队的任务特定指导。我们的 .NET Skills 简介说明了如何将这些技能添加到你的编码代理中。
实验性的 .NET MAUI DevFlow 工具包公开了正在运行的应用的可视化树、屏幕截图和交互工具,因此代理可以检查和测试 UI,而不是仅从源代码工作。
为了进行现代化改造,.NET 升级画布为你提供 GitHub Copilot 升级会话的可视化视图。你可以查看评估结果和依赖项兼容性,跟踪实施任务,并在升级代理工作时监控失败和进度。我们在 GitHub Copilot 应用中的现代化改造演练涵盖了从评估到执行的整个工作流。
工作负载
Web:ASP.NET Core 和 Blazor
当技术栈的其余部分能够理解应用程序类型时,它们才能发挥最大作用。ASP.NET Core 在所有使用 System.Text.Json 的地方都支持 C# 联合类型,包括 Minimal API 和 MVC 中的 JSON 请求与响应正文。生成的 OpenAPI 文档会用 anyOf 架构描述联合类型的各个备选分支。
此支持适用于 JSON 正文,不适用于路由、查询、标头或表单绑定。当多个联合类型分支具有相同的 JSON 结构时,请配置分类器,以便反序列化能够区分它们。ASP.NET Core 联合类型文档解释了这些边界。
对于需要执行 I/O 的规则,验证也变得更加实用。异步验证可与新的异步 DataAnnotations API 配合使用,因此验证器可以等待数据库查询或远程调用,而不是阻塞线程。Minimal API 和 Blazor 表单都可以使用此支持。
OpenAPI 3.2 现在是生成文档的默认版本。除其他改进外,它允许文档描述服务器发送事件流的逐事件负载。如果你的客户端生成器或工具链的其他部分尚不支持 3.2,你可以显式选择较早的文档版本。
对于长连接,SignalR 身份验证刷新允许连接在不重新连接的情况下刷新身份验证。Blazor Interactive Server 组件可以接收更新后的身份,并在声明更改时做出反应。
Blazor 为静态呈现页面和交互式应用程序都增加了功能。
新的 CacheView 组件会在静态服务器端呈现期间缓存组件子树的呈现输出。命中缓存时,Blazor 会重放标记,而不会创建这些子组件或运行其生命周期方法。这为页面中开销大、基本静态的部分提供了更小的缓存单元。
交互式服务器应用可以选择启用浏览器标签页不活跃时自动暂停线路。在可配置的延迟之后,暂停会释放不活跃用户占用的服务器内存和 SignalR 连接。此功能需要额外的包和显式配置;升级不会悄然改变应用程序的线路行为。
表单获得了针对静态服务器呈现的客户端验证以及异步验证支持。QuickGrid 和 Virtualize 增加了跳转到特定项的方法,当需要将用户带回大型集合中的原位置时非常有用。
Blazor 还为代理式用户界面增加了组件。新的 Microsoft.AspNetCore.Components.AI 包包含用于流式聊天、工具呈现、审批流和共享 UI 状态的组件。基本聊天可与任何 IChatClient 配合使用。对于与远程代理的高级体验,AG-UI .NET 集成可在 ASP.NET Core 代理终结点与 Blazor UI 之间传递流式响应、工具事件、审批请求和共享状态更新。
Blazor AI 组件包是实验性的,在整个 .NET 11 期间都保持预发布状态。这是一个尝试该方向并提供反馈的机会,而不是 ASP.NET Core 共享框架的稳定组成部分。请参阅 Blazor AI 组件文档。
AG-UI .NET SDK 简介介绍了该协议的客户端和服务器 API。使用新的 Blazor AI 组件构建 Agentic UI将它们整合到一个可运行的应用中。
请参阅 ASP.NET Core 的新增功能,了解 Blazor 功能、配置示例和兼容性详细信息。
客户端:.NET MAUI
.NET 11 中的 .NET MAUI 使其各平台默认使用 CoreCLR 运行时。迁移到 CoreCLR 使移动和桌面应用与其他 .NET 工作负载运行在相同的运行时基础之上。在不允许 JIT 编译的 Apple 平台上,运行时使用预编译代码和解释器,而不是在运行时生成本机代码。
Native AOT 是一种可选的发布替代方案;其 Android 支持仍处于实验阶段。在选择部署模型时,请查看特定于平台的运行时指南并测试应用的库。
UI 开发循环也受到了关注:
- XAML 增量热重载是 .NET 11 中的预览功能。它会更新页面和控件的活动实例,包括受支持的结构性编辑,而无需你导航离开再返回。它在 Debug 版本中默认启用。
- 隐式 XAML 命名空间声明消除了在每个文件根处重复标准命名空间声明的需要。
- Windows 默认使用新的
CollectionView2处理程序,而 Android Shell 采用基于处理程序的架构。 - 新的移动测试模板和
dotnet test设备选择将测试引入 CLI 工作流。
这些是有意义的运行时和处理程序变更,因此在升级过程中请演练导航、自定义处理程序和裁剪发布。可选的 Microsoft.Maui.Controls.Compatibility 包不再随附;仍引用它的应用需要迁移离开它。
.NET MAUI 遵循其自身的支持策略,与 .NET 运行时的 STS 和 LTS 生命周期分开。
Windows:WinUI、Windows Forms 和 WPF
对于新的 Windows 桌面应用,WinUI 3 是推荐的本地 UI 框架,将 C# 和 XAML 与现代控件和 Fluent Design System 相结合。它通过 Windows App SDK 提供,该 SDK 还使现有 WPF 和 Windows Forms 应用能够使用现代 Windows API。
要添加 UI 测试,请参阅 UWP 和 WinUI 3 应用:使用 MSTest 进行 UI 测试。
.NET 11 中的 Windows Forms 新增了一种可选的现代视觉样式模式,你可以在应用程序或控件级别选择。它还新增了响应系统视觉和辅助功能设置、延迟显示窗体直到准备就绪,以及在批量更新期间暂停绘制的方法。
这些控件让你可以在适合应用程序的地方引入焕新的呈现效果,而不是将框架升级视为自动的视觉重新设计。
WPF 更新侧重于可靠性,包括修复 Fluent 窗口背景、窗口管理器故障和弱事件清理。自包含 Windows 发布还包含加载混合模式 WPF 程序集的应用所需的原生依赖项。
开始使用并规划升级
安装 .NET 11 SDK。使用兼容且最新的 Visual Studio 2026 安装,或使用 带 C# Dev Kit 的 Visual Studio Code。
创建并运行控制台应用:
dotnet new console -n HelloDotnet11 -f net11.0
dotnet run --project HelloDotnet11你可以用上面的任一 C# 示例替换生成的程序,以试用新的语言特性。
对于现有应用程序,请规划跨开发和部署环境的升级:
- 如果你的仓库固定了 SDK 版本,请更新
global.json中的 SDK 选择,并在开发机和构建代理上安装匹配的 SDK。 - 将目标框架更新为 .NET 11,并在适用时保留平台特定的目标框架后缀。将包和工作负载更新为兼容版本。
- 查看 .NET 11 重大变更,包括 更新的最低 CPU 要求。仅安装新 SDK 并不会重定向你的应用。
- 运行测试,并在有代表性的工作负载下测量应用程序。验证你实际的发布模式、容器基础映像、本机依赖项和部署主机。
从 .NET 8 或 .NET 9 升级
.NET 8 和 .NET 9 将于 2026 年 11 月 10 日终止支持。请迁移到受支持的版本以继续获得修复。选择 .NET 11 以获得最新功能,或者如果 .NET 10 的 LTS 生命周期更符合你的需求,则选择 .NET 10。有关日期和服务要求,请参阅 .NET 支持政策。
如果你是从 .NET 11 候选发布版升级,请更新到最终的 SDK、运行时以及兼容的包和工作负载版本,而不是停留在预发布版本上。
感谢你与我们一同构建 .NET
.NET 11 是超过 7,000 名贡献者的成果。感谢每一位贡献代码、测试预览版、报告问题,并在全年帮助我们做出更好设计决策的人。你在各个预览版和候选发布版中的反馈帮助塑造了我们今天发布的内容。
.NET 生态系统持续增长,NuGet 上已有超过 589,000 个唯一包,包下载量超过 1.1 万亿次。

下载 .NET 11,用一个你熟悉的应用程序试用它,并参加 .NET Conf,直接向构建它的人学习。在 .NET GitHub 讨论区分享你的结果和问题。
作者

.NET 是免费、开源、跨平台的框架,用于构建现代应用和强大的云服务。
来源:Hacker News · devblogs.microsoft.com