.NET 11 Preview 5 发布

[复制链接]
发表于 2026-6-10 08:50:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
.NET 11 Preview 5 发布

原文:.NET 11 Preview 5 is now available! - .NET Blog
发布日期:2026 年 6 月 10 日(美国当地时间)
本日,我们很高兴地公布 .NET 11 的第五个预览版发布!此版本涵盖了 .NET Runtime、SDK、库、ASP.NET Core、.NET MAUI、C#、Entity Framework Core 等范畴的改进。请检察下方的具体分析并立即开始利用。
下载 .NET 11 Preview 5
📚 Libraries(库)

System.Text.Json 支持 JSON Lines 序列化

System.Text.Json 现在可以通过新的 JsonSerializer.SerializeAsyncEnumerable 重载(topLevelValues: true)将 IAsyncEnumerable 序列化为 JSON Lines 格式。类似的方法默认也会写入根级 JSON 数组,与现有的 DeserializeAsyncEnumerable 保持同等。JSON Lines 输出利用 \n 分隔值,忽略 WriteIndented 设置,每个项保持在一行上,恰当日记流、消息馈送和批处置惩罚。
  1. using System.Text;
  2. using System.Text.Json;
  3. static async IAsyncEnumerable<Reading> GetReadings()
  4. {
  5.     yield return new("sensor-1", 21.5);
  6.     yield return new("sensor-2", 22.0);
  7. }
  8. await using var stream = new MemoryStream();
  9. await JsonSerializer.SerializeAsyncEnumerable(
  10.     stream,
  11.     GetReadings(),
  12.     topLevelValues: true);
  13. Console.WriteLine(Encoding.UTF8.GetString(stream.ToArray()));
  14. // {"Id":"sensor-1","Value":21.5}
  15. // {"Id":"sensor-2","Value":22}
  16. public sealed record Reading(string Id, double Value);
复制代码
这些重载同时支持 Stream 和 PipeWriter,可搭配 JsonSerializerOptions 或 JsonTypeInfo 元数据利用。
LINQ 新增 Full Outer Joins(全外毗连)

LINQ 现在为 Enumerable、Queryable 和 AsyncEnumerable 添加了 FullJoin 运算符。全外毗连返回匹配对以及两个输入序列中的未匹配行。这使得内存查询拥有了开辟者们在 SQL 中用于和谐两个数据集时的同样本领。
  1. using System.Linq;
  2. Product[] catalog =
  3. [
  4.     new("A100", "Keyboard"),
  5.     new("B200", "Mouse"),
  6. ];
  7. Sale[] sales =
  8. [
  9.     new("B200", 4),
  10.     new("C300", 2),
  11. ];
  12. var rows = catalog.FullJoin(
  13.     sales,
  14.     product => product.Sku,
  15.     sale => sale.Sku,
  16.     (product, sale) => new
  17.     {
  18.         Sku = product?.Sku ?? sale!.Sku,
  19.         ProductName = product?.Name ?? "(not in catalog)",
  20.         QuantitySold = sale?.Quantity ?? 0,
  21.     });
  22. foreach (var row in rows)
  23. {
  24.     Console.WriteLine($"{row.Sku}: {row.ProductName}, sold {row.QuantitySold}");
  25. }
  26. public sealed record Product(string Sku, string Name);
  27. public sealed record Sale(string Sku, int Quantity);
复制代码
Preview 5 还为 Enumerable、Queryable 和 AsyncEnumerable 上的 Join、LeftJoin、RightJoin 和 GroupJoin 添加了返回元组的重载。
EqualityComparer 新增键选择器创建

EqualityComparer 新增 By 工厂方法,允许通过键选择器和可选的比力器创建相称比力器。
Random 新增泛型数值 API

Random 类新增了泛型 Next() 方法,支持 byte、sbyte、short、ushort、int、uint、long、ulong、Half、float、double、decimal、Int128、UInt128、BigInteger 和 char 范例。
StringBuilder 支持无复制传输块

新的 DiscardChunk 和 TryGetChunk 方法允许 StringBuilder 在不复制数据的情况下传输内部块。
进程行读取和 KillOnParentExit 扩展

Process.Start 行读取新增 CancellationToken 重载以支持取消长时间运行的行读取利用。新的 KillOnParentExit 属性允许在父进程退出时主动制止子进程。
Reflection 袒露可为空根本范例

ConstructorInfo、EventInfo、FieldInfo、MethodInfo、ParameterInfo 和 PropertyInfo 新增了可为空根本范例的反射支持。
网络 API 新增视频 MIME 范例和 QUIC 流优先级

新增 video/mp4、video/webm 等视频 MIME 范例。QuicStream 新增了 Priority 属性用于设置流的优先级。
Cryptography 新增 X25519 密钥协商

新增 X25519 和 X25519+HKDF-SHA-256 密钥协商支持,基于 RFC 7748 和 RFC 9180 规范。
  1. using System.Security.Cryptography;
  2. var alice = X25519Agree.GenerateKey();
  3. var bob = X25519Agree.GenerateKey();
  4. byte[] aliceShared = alice.Agree(bob.PublicKey);
  5. byte[] bobShared = bob.Agree(alice.PublicKey);
  6. Console.WriteLine(aliceShared.SequenceEqual(bobShared)); // True
复制代码
Syndication 支持裁剪和 Native AOT 馈送加载

SyndicationFeed 和 SyndicationItem 现在支持在修剪和 Native AOT 场景下加载 RSS/Atom 馈送。
Options 验证继续验证器范例

ValidateOptions 和 ValidateOptions 现在可以直接继续验证器范例,而不但仅是实例。
⏱️ Runtime(运行时)

Runtime 异步挂起速率更快

Runtime 异步挂起和规复在 Preview 5 中继续加速。最大的改进来自对利用 OSR(On-Stack Replacement,栈上更换)优化的异步方法——Runtime 异步现在直接将方法规复到优化代码中,而不是走通用 OSR 转换路径。干系 PR 陈诉过渡开销约为 10-20 倍,挂起麋集型基准测试从 6357.1 ms 改进到了 457.1 ms。
其他 Runtime 异步优化:

  • 通用挂起路径利用更小的天生代码,挂起麋集型微基准提拔了约 8%,天生代码从 766 字节缩减到 751 字节。
  • 挂起和规复镌汰了线程当地存储工作,克制了热路径上的多个写屏蔽,从 350.3 ms 改进到 291.3 ms。
  • Runtime 异步现在在 IValueTaskSource 支持的 ValueTask 挂起时重用连续,消除了该路径上的分配。
JIT 优化

冗余 Span 和空值查抄

JIT 现在可以或许从重复截取固定宽度前缀的 span 循环中移除更多范围查抄。
  1. int Sum(ReadOnlySpan<int> data)
  2. {
  3.     Vector128<int> sum = default;
  4.     while (data.Length >= Vector128<int>.Count)
  5.     {
  6.         sum += Vector128.Create(data);
  7.         data = data.Slice(Vector128<int>.Count);
  8.     }
  9.     int result = Vector128.Sum(sum);
  10.     foreach (int t in data) result += t;
  11.     return result;
  12. }
复制代码
示例从 113 字节缩减到 79 字节。
界限查抄消除改进

JIT 对 NegativeOne 常量有了更全面的明白,消除了 array.AsSpan()[..^1] 等模式的冗余查抄。
常量折叠改进

JIT 的常量折叠阶段现在处置惩罚 uint 和 nuint 范例的常量。
Arm 内联函数新增原生整数和 SVE2 谓词

Arm64 内联函数对 int、uint、long 和 ulong 进位的相加/相减新增了原生整数支持。SVE2 谓词内联函数也得到了增强。
GC 修剪和压缩改进

GC 的压缩阶段在涉及到包罗引用的对象时,利用更高效的扫描方式。
Browser/WebAssembly CoreCLR 启用

启用了在欣赏器/WebAssembly 情况中运行 CoreCLR 的本领。
🛠️ SDK

基于文件的应用可以引用其他 C# 文件

新的 #:ref 指令引用另一个基于文件的应用作为库,支持转达引用。
  1. // app.cs
  2. #:ref lib.cs
  3. Console.WriteLine(MyLib.Greeter.Greet("World"));
  4. // lib.cs
  5. namespace MyLib;
  6. public static class Greeter
  7. {
  8.     public static string Greet(string name) => $"Hello, {name}!";
  9. }
复制代码
#:include 和 #:exclude 指令不再须要功能标记。
CLI 下令更同等地处置惩罚基于文件的应用

更多 SDK 下令现在明白基于文件的应用路径。
SDK 在构建期间提供毛病和 EOL 查抄

当检测到已知毛病或 SDK 版本已到达 EOL 时,会天生告诫。
dotnet new 包罗 MCP Server 模板
  1. dotnet new mcp-server
复制代码
控制台应用默认包罗 System.Net.Http.Json

容器发布验证 Bearer Token 范畴

dotnet test 在 LLM 情况中禁用 ANSI 输出

NativeAOT CLI 快速路径已打包并可选参加

C#

封闭类条理布局(Closed Class Hierarchies)

closed 类只能在同一步伐会集被直接继续。编译器在利用已知派生范例查抄 switch 表达式的穷尽性时可以利用这一点。
  1. public closed record class GateState;
  2. public record class Closed : GateState;
  3. public record class Open(float Percent) : GateState;
  4. static string Describe(GateState state) => state switch
  5. {
  6.     Closed => "closed",
  7.     Open(var percent) => $"{percent}% open"
  8. };
复制代码
封闭类规则:

  • closed 类隐式为抽象类。
  • 直接子范例必须与封闭基类在同一步伐会集声明。
  • 当 switch 表达式处置惩罚了全部可达的直接子范例时,该 switch 表达式即为穷尽的。
团结声明和团结模式(Union Declarations and Union Patterns)

union 声明创建了一个值范例,其值可以是一组固定 case 范例之一。模式匹配可以解包团结值,当 switch 表达式处置惩罚了每种 case 范例时即为穷尽的。
  1. public record class Dog(string Name);
  2. public record class Cat(int Lives);
  3. public union Pet(Dog, Cat);
  4. static string Describe(Pet pet) => pet switch
  5. {
  6.     Dog(var name) => $"dog: {name}",
  7.     Cat(var lives) => $"cat: {lives}"
  8. };
复制代码
Unsafe Evolution(不安全代码演进)

这是 .NET 11 的预览特性。
在 Preview 5 中,指针范例和指针值现在可以出现在 unsafe 上下文之外;unsafe 界限移到相识引用非托管内存的利用上。
  1. int value = 42;
  2. int* pointer = &value;
  3. unsafe
  4. {
  5.     System.Console.WriteLine(*pointer);
  6. }
复制代码
指针声明和取地点表达式允许在 unsafe 块外。指针解引用仍然须要 unsafe 上下文。
🌐 ASP.NET Core

Blazor SSR 支持客户端验证

Blazor SSR 表单现在得到即时、欣赏器内的验证反馈,无需服务器来回。该功能默认对全部包罗 DataAnnotationsValidator 组件的 SSR 表单启用。
Blazor 支持异步表单验证

新的 AsyncValidator 组件允许 Blazor 表单利用异步验证逻辑。
Blazor 和 Minimal APIs 支持当地化验证错误

验证错误消息现在可以通过 IStringLocalizer 举行当地化。
QuickGrid 无需交互性即可工作

QuickGrid 组件可以在 SSR 模式下通过表单回发处置惩罚排序和分页。
SupplyParameterFromSession 用于 Blazor

[SupplyParameterFromSession] 特性允许组件从 HttpContext.Session 获取参数值。
Blazor WebAssembly Gateway

WASM 应用可通过 ASP.NET Core 服务器网关哀求资源,无需袒露 API 端点或处置惩罚 CORS。
跨渲染模式转达子内容

Kestrel 应用 Trailer Header 超时

OpenAPI 模式更好地匹配 ASP.NET Core 活动

📱 .NET MAUI

可靠性宁静台修复波次

Preview 5 带来了涵盖 CollectionView、CarouselView、Shell、手势、布局、RTL、SearchHandler、TabBar、Label、GraphicsView、SwipeView、HybridWebView、Entry、Editor、Picker、BoxView、ImageButton、RadioButton、AppThemeBinding 和导航生命周期的全面可靠性更新。
动画得到 CancellationToken 感知重载
  1. await myLabel.FadeTo(0, 500).WaitAsync(cancellationToken);
复制代码
BoxView 新增带 Brush 支持的 Fill 属性

Windows Maps 得到 Azure Maps 支持的实际实现

Material 3 处置惩罚器和资助器变为公开

Android 最低 SDK 提拔到 API 24

.NET for Android 稳固化 API 37

Apple Intelligence API 在 Essentials.AI 中发布

🎁 Entity Framework Core

dotnet ef 支持基于文件的应用
  1. dotnet ef migrations add InitialCreate --file .\App.cs
复制代码
dotnet ef 支持设置文件

dotnet ef 现在支持从 .config/dotnet-ef.json 文件加载默认选项。
EF1004:在同步运行异步 EF 查询时发出告诫
  1. // EF1004: 这可能会同步评估 EF 查询。
  2. await foreach (var blog in blogsQuery.ToAsyncEnumerable()) { }
  3. // 改用 EF Core 的异步查询管道
  4. await foreach (var blog in blogsQuery.AsAsyncEnumerable()) { }
复制代码
SQL Server 2022 兼容性成为默认
  1. optionsBuilder.UseSqlServer(
  2.     connectionString,
  3.     sqlServerOptions => sqlServerOptions.UseCompatibilityLevel(150));
复制代码
Temporal 周期属性可以映射到 CLR 属性

天生的 C# 利用文件范围定名空间

查询翻译天生更轻便的 SQL

粉碎性变动


  • 移除了 .NET 11 之前的过期 API
  • Cosmos id 转义变动
🚀 开始利用

安装 .NET 11 SDK
如果您在 Windows 上利用 Visual Studio,保举安装最新的 Visual Studio 2026 Insiders。您也可以利用 Visual Studio Code 和 C# Dev Kit 扩展。
相识更多


  • .NET 11 库的新特性
  • .NET 11 运行时的新特性
  • .NET 11 SDK 的新特性
  • C# 15 的新特性
  • ASP.NET Core 在 .NET 11 中的新特性
  • .NET MAUI 在 .NET 11 中的新特性
  • EF Core 11 的新特性
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表