马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
.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 设置,每个项保持在一行上,恰当日记流、消息馈送和批处置惩罚。- using System.Text;
- using System.Text.Json;
- static async IAsyncEnumerable<Reading> GetReadings()
- {
- yield return new("sensor-1", 21.5);
- yield return new("sensor-2", 22.0);
- }
- await using var stream = new MemoryStream();
- await JsonSerializer.SerializeAsyncEnumerable(
- stream,
- GetReadings(),
- topLevelValues: true);
- Console.WriteLine(Encoding.UTF8.GetString(stream.ToArray()));
- // {"Id":"sensor-1","Value":21.5}
- // {"Id":"sensor-2","Value":22}
- public sealed record Reading(string Id, double Value);
复制代码 这些重载同时支持 Stream 和 PipeWriter,可搭配 JsonSerializerOptions 或 JsonTypeInfo 元数据利用。
LINQ 新增 Full Outer Joins(全外毗连)
LINQ 现在为 Enumerable、Queryable 和 AsyncEnumerable 添加了 FullJoin 运算符。全外毗连返回匹配对以及两个输入序列中的未匹配行。这使得内存查询拥有了开辟者们在 SQL 中用于和谐两个数据集时的同样本领。- using System.Linq;
- Product[] catalog =
- [
- new("A100", "Keyboard"),
- new("B200", "Mouse"),
- ];
- Sale[] sales =
- [
- new("B200", 4),
- new("C300", 2),
- ];
- var rows = catalog.FullJoin(
- sales,
- product => product.Sku,
- sale => sale.Sku,
- (product, sale) => new
- {
- Sku = product?.Sku ?? sale!.Sku,
- ProductName = product?.Name ?? "(not in catalog)",
- QuantitySold = sale?.Quantity ?? 0,
- });
- foreach (var row in rows)
- {
- Console.WriteLine($"{row.Sku}: {row.ProductName}, sold {row.QuantitySold}");
- }
- public sealed record Product(string Sku, string Name);
- 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 规范。- using System.Security.Cryptography;
- var alice = X25519Agree.GenerateKey();
- var bob = X25519Agree.GenerateKey();
- byte[] aliceShared = alice.Agree(bob.PublicKey);
- byte[] bobShared = bob.Agree(alice.PublicKey);
- 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 循环中移除更多范围查抄。- int Sum(ReadOnlySpan<int> data)
- {
- Vector128<int> sum = default;
- while (data.Length >= Vector128<int>.Count)
- {
- sum += Vector128.Create(data);
- data = data.Slice(Vector128<int>.Count);
- }
- int result = Vector128.Sum(sum);
- foreach (int t in data) result += t;
- return result;
- }
复制代码 示例从 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 指令引用另一个基于文件的应用作为库,支持转达引用。- // app.cs
- #:ref lib.cs
- Console.WriteLine(MyLib.Greeter.Greet("World"));
- // lib.cs
- namespace MyLib;
- public static class Greeter
- {
- public static string Greet(string name) => $"Hello, {name}!";
- }
复制代码 #:include 和 #:exclude 指令不再须要功能标记。
CLI 下令更同等地处置惩罚基于文件的应用
更多 SDK 下令现在明白基于文件的应用路径。
SDK 在构建期间提供毛病和 EOL 查抄
当检测到已知毛病或 SDK 版本已到达 EOL 时,会天生告诫。
dotnet new 包罗 MCP Server 模板
控制台应用默认包罗 System.Net.Http.Json
容器发布验证 Bearer Token 范畴
dotnet test 在 LLM 情况中禁用 ANSI 输出
NativeAOT CLI 快速路径已打包并可选参加
C#
封闭类条理布局(Closed Class Hierarchies)
closed 类只能在同一步伐会集被直接继续。编译器在利用已知派生范例查抄 switch 表达式的穷尽性时可以利用这一点。- public closed record class GateState;
- public record class Closed : GateState;
- public record class Open(float Percent) : GateState;
- static string Describe(GateState state) => state switch
- {
- Closed => "closed",
- Open(var percent) => $"{percent}% open"
- };
复制代码 封闭类规则:
- closed 类隐式为抽象类。
- 直接子范例必须与封闭基类在同一步伐会集声明。
- 当 switch 表达式处置惩罚了全部可达的直接子范例时,该 switch 表达式即为穷尽的。
团结声明和团结模式(Union Declarations and Union Patterns)
union 声明创建了一个值范例,其值可以是一组固定 case 范例之一。模式匹配可以解包团结值,当 switch 表达式处置惩罚了每种 case 范例时即为穷尽的。- public record class Dog(string Name);
- public record class Cat(int Lives);
- public union Pet(Dog, Cat);
- static string Describe(Pet pet) => pet switch
- {
- Dog(var name) => $"dog: {name}",
- Cat(var lives) => $"cat: {lives}"
- };
复制代码 Unsafe Evolution(不安全代码演进)
这是 .NET 11 的预览特性。
在 Preview 5 中,指针范例和指针值现在可以出现在 unsafe 上下文之外;unsafe 界限移到相识引用非托管内存的利用上。- int value = 42;
- int* pointer = &value;
- unsafe
- {
- System.Console.WriteLine(*pointer);
- }
复制代码 指针声明和取地点表达式允许在 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 感知重载
- 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 支持基于文件的应用
- dotnet ef migrations add InitialCreate --file .\App.cs
复制代码 dotnet ef 支持设置文件
dotnet ef 现在支持从 .config/dotnet-ef.json 文件加载默认选项。
EF1004:在同步运行异步 EF 查询时发出告诫
- // EF1004: 这可能会同步评估 EF 查询。
- await foreach (var blog in blogsQuery.ToAsyncEnumerable()) { }
- // 改用 EF Core 的异步查询管道
- await foreach (var blog in blogsQuery.AsAsyncEnumerable()) { }
复制代码 SQL Server 2022 兼容性成为默认
- optionsBuilder.UseSqlServer(
- connectionString,
- 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 的新特性
|