首页 > 基础资料 博客日记
.NET 11 Preview 4 正式发布:Runtime-Async 全面启用、Process API 大幅扩展
2026-05-13 08:00:02基础资料围观4次
微软于 2026 年 5 月 12 日发布了 .NET 11 的第四个预览版(Preview 4)。这个版本延续了 .NET 11 系列的高频迭代节奏,在运行时异步模型、进程管理 API、ASP.NET Core 的 AI 集成以及 EF Core 的向量搜索等多个方向上都带来了实质性进展。
本文按领域梳理了本次预览版的核心变更,帮助开发者快速定位自己关心的改进点。
一、概览:Preview 4 覆盖领域
| 领域 | 核心亮点 |
|---|---|
| Libraries(类库) | Process 类大规模 API 扩展;Span-based 压缩 API;浮点数十六进制格式化 |
| Runtime(运行时) | 运行时库全面启用 Runtime-Async;JIT 常量折叠优化;支持 1024+ CPU |
| SDK | dotnet watch 设备选择;Fish Shell 补全;OpenTelemetry 遥测 |
| C# 语言 | Shebang 诊断改进;VBCSCompiler 可选编译缓存 |
| ASP.NET Core | OpenAPI 支持 HTTP QUERY;Blazor 电路暂停;MCP Server 模板 |
| .NET MAUI | dotnet watch 支持 Android/iOS 热重载 |
| Entity Framework Core | SQL Server 2025 近似向量搜索;JSON 映射集成到关系模型 |
二、Libraries:类库重大更新
2.1 Process 类大规模 API 扩展
本次更新中,System.Diagnostics.Process 获得了一组开箱即用的高级 API,覆盖了进程启动、输出捕获、生命周期控制等常见场景,大幅减少了手写进程调用代码的工作量。
新增 API 一览:
| API | 说明 |
|---|---|
Process.Run / Process.RunAsync |
一键启动进程并获取结果 |
Process.RunAndCaptureText / Process.RunAndCaptureTextAsync |
直接捕获 stdout 和 stderr 为文本 |
Process.ReadAllText / Process.ReadAllBytes |
单调用读取子进程全部输出 |
Process.ReadAllLinesAsync |
返回 ProcessOutputLine 结构,区分 stdout 和 stderr |
以前用 ProcessStartInfo + RedirectStandardOutput + 手动事件订阅的冗长写法,现在可以简化为:
// 启动进程并直接获取输出文本
var result = await Process.RunAndCaptureTextAsync("git", "log --oneline -5");
Console.WriteLine(result.StandardOutput);
// 逐行读取,自动区分 stdout / stderr
await foreach (var line in Process.ReadAllLinesAsync("dotnet", "build"))
{
var prefix = line.IsError ? "[ERR]" : "[OUT]";
Console.WriteLine($"{prefix} {line.Content}");
}
2.2 Span-based 压缩/解压 API
新增基于 Span<T> 的 Deflate、ZLib、GZip 编码器/解码器 API,压缩解压操作无需分配中间字节数组,对高吞吐和内存敏感场景(如网络中间件、流处理管道)有明显收益。
2.3 浮点数十六进制格式化和解析
新增对浮点数十六进制格式的支持,例如 0x1.921fb54442d18p+1(即 π 的 IEEE 754 十六进制表示)。这在科学计算、二进制数据交换和精度敏感的场景中很实用。
2.4 System.Text.Json 持续增强
JSON 序列化/反序列化继续获得小幅改进,保持与之前预览版的演进方向一致。
2.5 其他重要更新
- UTF 验证与无效子序列搜索:更细粒度的 UTF 文本处理原语
- 限流修复:
RetryAfter语义修复、小数 permit 支持、ChainedRateLimiter改进 - 正则表达式:源生成器和引擎层面的 bug 修复
- 配置绑定与文件提供程序:稳定性和性能改进
- MemoryCache 内置 OpenTelemetry 指标:缓存命中率、驱逐次数等可观测
- 可区分联合脚手架:
System.Runtime.CompilerServices命名空间下新增联合类型生成支持 - TarReader 支持 GNU sparse format 1.0:处理稀疏 tar 归档文件
- TLS 握手加固:Linux 平台证书验证警报增强
- HTTP/2 自动降级:支持 Windows 认证场景下的协议降级
三、Runtime:运行时核心改进
3.1 Runtime-Async 全面启用(最重要变更)
.NET 11 Preview 4 的标志性变更:所有运行时库现在使用 runtime-async=on 编译。这意味着:
- 编译器不再为异步方法生成传统的异步状态机(async state machine)
- 异步调用链依赖运行时异步原语直接调度
- 预期带来吞吐量提升和库体积缩减的双重收益
伴随这项变更,运行时还引入了两个配套优化:
协变 Task → Task<T> 重写:当派生类方法返回 Task<T> 而基类方法返回 Task 时,运行时自动生成桥接 thunk,不需要开发者手动适配。
Crossgen2 内联 Runtime-async 方法:预编译阶段即可对 runtime-async 方法进行内联优化,减少调用开销。
3.2 JIT 编译器优化
- 常量折叠
SequenceEqual:JIT 能在编译时折叠常量字符串的SequenceEqual调用,将运行时比较直接替换为编译期确定的结果 - 硬件内联函数改进:更好的 SIMD 代码生成
- ReadyToRun 改进:预编译格式持续优化
3.3 其他运行时变更
- 支持 1024+ CPU:打破之前 64 核/CPU 组限制,面向高端服务器和云原生超大实例
- Browser/WebAssembly CoreCLR 支持:继续推进 CoreCLR 在 WebAssembly 上的实验性运行
四、SDK 更新
| 特性 | 说明 |
|---|---|
dotnet watch 设备选择 |
为 MAUI 和移动项目选择目标设备(Android/iOS 模拟器或物理机) |
| Fish Shell 补全 | 与 Bash、Zsh、PowerShell 对齐,Fish 用户也能享受命令补全 |
dotnet reference 回退 |
未显式指定项目文件时,自动回退到当前目录的项目 |
| OpenTelemetry 遥测 | CLI 内部遥测从 Application Insights 迁移到 OpenTelemetry,符合生态标准 |
五、C# 语言更新
- Shebang 诊断更清晰:在脚本文件顶部使用
#!/usr/bin/env dotnet等 shebang 时,编译器提供更精确的诊断信息 - VBCSCompiler 可选编译缓存:为编译服务器(VBCSCompiler)启用可选的编译缓存,重复编译场景可节省增量时间
六、ASP.NET Core 更新
6.1 OpenAPI 支持 HTTP QUERY 方法
OpenAPI 文档生成器现在将 HTTP QUERY 识别为已知操作类型。QUERY 是一种安全的幂等方法,允许在请求体中发送查询条件(替代长 URL 查询字符串),OpenAPI 规范层面的支持让 API 文档能正确描述这类端点。
6.2 Blazor 增强
| 特性 | 说明 |
|---|---|
[SupplyParameterFromTempData] |
从 TempData 字典向组件参数提供值,简化跨页面状态传递 |
| 服务器端电路暂停/恢复 | 服务器可主动暂停 Blazor 电路连接,客户端保持状态,恢复时无缝继续 |
| Virtualize 组件改进 | 上方内容变化时保持视口稳定;新增 AnchorMode 控制滚动锚定行为 |
| 更小的 WASM 发布输出 | Blazor WebAssembly 发布体积进一步优化 |
电路暂停的示例场景:服务器负载过高时,暂时断开非活跃用户的 Blazor 连接,释放资源,用户切回页面时瞬间恢复——对大规模部署很有价值。
6.3 MCP Server 模板
.NET SDK 现在附带 MCP(Model Context Protocol)服务器模板。MCP 是连接 AI 模型与外部数据/工具的标准协议,这个模板让用 .NET 构建 AI 代理服务(Agent Service)的启动成本接近于零:
dotnet new mcp-server -o MyAgentService
6.4 其他 ASP.NET Core 变更
- Kestrel TLS 握手可观测性:TLS 握手事件进入 OpenTelemetry 链路追踪
- 响应压缩始终发出
Vary: Accept-Encoding:修正缓存行为,避免代理缓存损坏压缩响应 - 文件结果类型出现在 OpenAPI 文档中:
FileStreamResult、FileContentResult等被正确描述 - 端点过滤器可观察参数绑定失败:参数绑定异常可被端点过滤器捕获和处理
七、.NET MAUI 更新
dotnet watch热重载:Preview 4 正式为 Android 和 iOS 项目带来dotnet watch热重载支持。修改 XAML 或 C# 代码后,变更会自动推送到运行中的模拟器或物理设备,跨平台移动开发的工作流更贴近 Web 开发的即时反馈体验。
八、Entity Framework Core 更新
| 特性 | 说明 |
|---|---|
| SQL Server 2025 近似向量搜索 | 针对 SQL Server 2025 的向量类型,EF Core 提供近似向量搜索(Approximate Vector Search)的 LINQ 映射 |
| JSON 映射集成到关系模型 | JSON 列映射不再是"二等公民",完全融入关系模型的查询、跟踪和迁移管道 |
| 时态表周期属性映射 | 时态表(Temporal Table)的 PeriodStart / PeriodEnd 列可显式映射到 CLR 属性 |
dotnet ef 默认配置 |
dotnet ef 命令现在从 dotnet-ef.json 读取默认配置,减少命令行参数重复 |
向量搜索的示例:
var results = await context.Products
.OrderBy(p => p.Embedding.ApproximateDistance(queryVector))
.Take(10)
.ToListAsync();
九、如何开始
下载并安装 .NET 11 Preview 4 SDK:
- SDK 下载:https://dotnet.microsoft.com/download/dotnet/11.0
- Windows 用户:安装 Visual Studio 2026 Insiders(Preview 4 工具链需要匹配的 IDE 支持)
- VS Code 用户:安装最新版 C# Dev Kit 扩展即可
在终端中验证安装:
dotnet --version
# 输出类似 11.0.100-preview.4.xxxxx
十、总结
.NET 11 Preview 4 是一次覆盖面广、深度够足的更新。几个最值得关注的信号:
- Runtime-Async 全面启用标志着 .NET 异步编程模型进入新阶段——从编译器生成状态机转向运行时原生调度,吞吐和体积收益将在后续预览版中逐步显现。
- Process API 扩展是系统编程(system programming)在 .NET 中的一次重要补位,让脚本式进程调用成为可能。
- ASP.NET Core 在 OpenAPI、Blazor 基础设施和 MCP AI 集成三个方向同步推进,继续保持 Web/AI 开发平台的优势。
- EF Core 的向量搜索和 MAUI 的热重载则分别在数据层和移动端改善了开发体验。
随着 .NET 11 逐步接近正式版(预计 2026 年 11 月),Preview 4 已经展现出相当成熟的技术方向。建议开发者在自己的场景中有针对性地试用,尤其是 Runtime-Async 和 Process API 这两个变化点,值得提前评估对现有代码的影响。
本文基于 .NET Blog 官方发布说明整理。原文及详细变更日志请参阅:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:

