今天,我们很高兴宣布 .NET 11 发布!今年的版本让构建现代应用程序更快、更高效,并在 C# 15、ASP.NET Core、.NET MAUI 和 Windows 开发方面带来改进。凭借数百项运行时优化、响应更快的 SDK 工具,以及日常命令中更少的开销,你可以减少等待时间,把更多时间用于创造。构建更丰富的 Web 和跨平台应用程序,利用新的 C# 语言功能,并通过改进的工具和智能体能力探索 AI 驱动的开发。
.NET 11 支持
参加 .NET Conf,11 月 10-13 日
在 .NET Conf 2026 上与产品团队和社区一起探索 .NET 11。会议包括 11 月 10 日和 11 日的产品团队议程,随后是两天的社区议程。
观看第 1 天直播(包括主题演讲),或浏览会议议程播放列表。
发布 .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 canvas 审查现代化进度,让智能体开发工具发挥作用。
- .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 还新增封闭层次结构。封闭类将直接派生限制在其声明程序集内,为编译器提供检查层次结构上的模式所需的信息。当你想要组合现有类型时,联合类型很有用;封闭层次结构适合你拥有继承关系的模型。
较小的语言功能也有助于日常代码。集合表达式参数让你无需放弃集合表达式语法即可传递构造函数或工厂参数:
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 支持。
Platform
SDK
SDK 现在默认启用 Native AOT CLI 主机。help 和版本查询等命令无需启动托管 CLI 即可运行,工具启动也可以避开该启动路径。需要托管执行的命令仍会使用它。
MSBuild 服务器默认也会在 CLI 调用之间保持热状态,减少重复的启动工作。Linux 和 macOS 上的 SDK 安装程序通过程序集去重变得更小。
基于文件的应用可通过 #:include 跨源文件扩展,解决方案筛选器可从 CLI 创建和编辑。dotnet watch 新增 Aspire 应用主机集成、崩溃恢复以及移动项目的设备选择。
对于使用 Microsoft.Testing.Platform 的团队,dotnet test 新增运行级超时、失败限制、更清晰的进度报告以及按模块划分的结果目录。测试运行器很重要:这些开关不能与 VSTest 命令行选项互换。
容器发布通过 SOURCE_DATE_EPOCH 新增可复现的映像摘要,并在目标清单已存在时避免冗余的层上传。NuGet 源配置新增最低包发布时长设置,让团队可以等待一段时间后,新发布的包版本才有资格被选择。这是一项额外的策略控制,不能替代漏洞检查或依赖项审查。
有关命令示例和配置,请参阅 SDK 和工具中的新增功能。
Runtime and performance
.NET 11 的性能工作既涉及你部署的代码,也涉及你用于开发它的工具。Stephen Toub 的 Performance Improvements in .NET 11 详细介绍了数百项运行时和库优化,并附有基准测试和代码示例。
即时 (JIT) 编译器改进移除了更多冗余边界检查和分支,改进了去虚拟化,并将更多操作折叠为常量。例如,当 JIT 在编译时知道输入时,它可以优化更多 SequenceEqual 调用。这些更改改进了生成的代码,而无需你重写相应的应用程序逻辑。
Native AOT 接口调度使用共享辅助程序,减少接口调用点所需的代码,并提高接口密集型工作负载的吞吐量。硬件支持也得到扩展,包括在受支持的 x64 和 Arm64 硬件上为 Half 操作提供 FP16 指令,以及新的向量构造和组合 API。
诊断方面也有有用的工作。进程内崩溃报告日志记录可以在进程退出前捕获托管堆栈跟踪、模块信息和运行时状态。此报告路径以前在移动平台上可用,现在也支持 Linux 和 macOS。
一如既往,请在你自己的应用程序上衡量效果。吞吐量、启动时间、内存使用和部署大小取决于你选择的工作负载和发布选项。
Runtime Async 一直是 .NET 11 各个预览版中反复出现的主题。它将异步挂起和恢复移入运行时,而不是依赖编译器生成的状态机。
像 {{NAME_ab12cd34}} 这样写出的值是真实值的占位符。在回复和工具调用中都完全按原样使用它们:它们会在任何内容运行之前被填入真实值。不要要求验证它们,也不要用示例替换它们。
文章标题:Announcing .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 让你可以控制继承的句柄、挂起启动和进程信号。构建工具和开发者实用程序可以在进程管道连接上减少代码量,同时仍能检查子进程是如何结束的。有关示例,请参阅 Process API Improvements in .NET 11。
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 列现在可用于以 table-per-type 或 table-per-concrete-type 继承映射的实体。其他改进包括迁移工具,以及更多提供程序特定的 JSON 能力。
对于 SQL Server 应用程序,EF Core 增加了对向量索引和近似向量搜索的支持。SQL Server 功能及相应的 EF API 是实验性的。在评估它们之前,请参阅向量搜索文档和限制。
EF Core 11 需要 .NET 11。升级时,请检查数据库提供程序的兼容性、EF Core 11 的重大更改以及运行时更改。
Developer tools
新的 dotnetup 工具链管理器让你可以在用户账户中安装和更新 .NET SDK 与运行时。它目前处于公开预览阶段,可帮助你管理并行版本并跟进服务更新。
.NET Skills 为编码代理提供来自 .NET 团队的任务特定指导。我们的 .NET Skills 介绍说明了如何将这些技能添加到你的编码代理中。
实验性的 .NET MAUI DevFlow 工具包会暴露正在运行的应用的可视化树、屏幕截图和交互工具,因此代理可以检查和测试 UI,而不是只依据源代码工作。
在现代化方面,.NET Upgrade canvas 为你提供 GitHub Copilot 升级会话的可视化视图。你可以查看评估发现和依赖兼容性,跟踪实现任务,并在升级代理工作时监控失败和进度。我们在 GitHub Copilot 应用中的现代化演练涵盖了从评估到执行的整个工作流。
Workloads
Web: ASP.NET Core and Blazor
当堆栈的其余部分理解应用程序类型时,这些类型才最有用。ASP.NET Core 在所有使用 System.Text.Json 的地方支持 C# 联合类型,包括 Minimal APIs 和 MVC 中的 JSON 请求与响应体。生成的 OpenAPI 文档使用 anyOf 架构描述联合类型的各个备选类型。
此支持适用于 JSON 体,不适用于路由、查询、标头或表单绑定。当多个联合用例具有相同的 JSON 形状时,请配置分类器,以便反序列化能够区分它们。ASP.NET Core 联合类型文档解释了这些边界。
对于需要执行 I/O 的规则,验证也变得更加实用。异步验证可与新的异步 DataAnnotations API 配合使用,因此验证器可以等待数据库查找或远程调用,而不是阻塞线程。Minimal APIs 和 Blazor 表单可以使用此支持。
OpenAPI 3.2 现在是生成文档的默认版本。在其他改进中,它让文档能够描述服务器发送事件流的每事件负载。如果你的客户端生成器或工具链的其他部分尚不支持 3.2,你可以显式选择较旧的文档版本。
对于长连接,SignalR 身份验证刷新让连接无需重新连接即可刷新身份验证。Blazor Interactive Server 组件可以接收更新后的身份,并在声明更改时做出反应。
Blazor 为静态渲染页面和交互式应用程序都增加了能力。
新的 CacheView 组件在静态服务器端渲染期间缓存组件子树的渲染输出。在缓存命中时,Blazor 会重放标记,而不创建这些子组件或运行其生命周期方法。这为你提供了一个更小的缓存单元,用于页面中开销大、基本静态的部分。
交互式 Server 应用可以选择在浏览器标签页处于非活动状态时自动暂停线路。在可配置的延迟之后,暂停会释放非活动用户所占用的服务器内存和 SignalR 连接。该功能需要额外的包并显式配置;升级不会悄悄改变你应用程序的线路行为。
Forms 为静态服务器渲染新增了客户端验证,并支持异步验证。QuickGrid 和 Virtualize 新增了跳转到特定项的方式,在把用户带回大型集合中其所在位置时很有用。
Blazor 还新增了面向 agentic 用户界面的组件。新的 Microsoft.AspNetCore.Components.AI 包包含用于流式聊天、工具渲染、审批流程和共享 UI 状态的组件。基础聊天可与任意 IChatClient 配合使用。若要使用远程 agent 获得高级体验,AG-UI .NET 集成会在 ASP.NET Core 的 agent 端点与 Blazor UI 之间传递流式响应、工具事件、审批请求和共享状态更新。
Blazor AI 组件包是实验性的,在整个 .NET 11 期间保持预发布状态。它是尝试这一方向并给出反馈的机会,而不是 ASP.NET Core 共享框架的稳定组成部分。参见 Blazor AI 组件文档。
AG-UI .NET SDK 介绍涵盖了该协议的客户端与服务器 API。Build Agentic UI with the new Blazor AI components 则把它们组合成一个可运行的应用。
参见 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 是推荐的 native UI 框架,它将 C# 和 XAML 与现代控件及 Fluent Design System 相结合。它通过 Windows App SDK 交付,该 SDK 也让现有的 WPF 和 Windows Forms 应用能够使用现代 Windows API。
要添加 UI 测试,参见 UWP and WinUI 3 apps: UI testing with MSTest。
.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# 示例替换生成的程序,以试用新的语言特性。
对于现有应用程序,请在开发与部署环境中规划升级:
- 如果你的仓库在 global.json 中固定了 SDK 版本,请更新其中的 SDK 选择,并在开发机和构建代理上安装匹配的 SDK。
- 将目标框架更新为 .NET 11,在适用处保留平台特定的目标框架后缀。将包和工作负载更新为兼容版本。
- 查阅 .NET 11 的重大变更,包括更新的最低 CPU 要求。仅安装新 SDK 并不会更改应用的目标框架。
- 运行测试,并在具有代表性的工作负载下测量应用程序。验证你实际使用的发布模式、容器基础镜像、原生依赖项和部署主机。
从 .NET 8 或 .NET 9 升级
如果你是从 .NET 11 候选发布版升级,请更新到最终的 SDK、运行时以及兼容的包和工作负载版本,而不是继续停留在预发布版本上。
感谢你与我们一起构建 .NET
.NET 11 是 7,000 多名贡献者的成果。感谢每一位贡献代码、测试预览版、报告问题,并在过去一年中帮助我们做出更好设计决策的人。你们在预览版和候选发布版期间的反馈,塑造了我们今天发布的内容。
.NET 生态系统持续增长,NuGet 上已有超过 589,000 个唯一包,包下载量超过 1.1 万亿次。

下载 .NET 11,用一个你熟悉的应用程序试用它,并在 .NET Conf 上与我们一起,直接从构建它的人那里学习。欢迎在 .NET GitHub discussions 中分享你的结果和问题。