.NET 10首個預(yù)覽版發(fā)布:重大改進與新特性概覽!
前言
.NET 團隊于2025年2月25日發(fā)布博文,宣布推出 .NET 10 首個預(yù)覽版更新,重點改進.NET Runtime、SDK、Libraries 、C#、ASP.NET Core、Blazor 和.NET MAUI 等。
.NET 10介紹
.NET 10 是 .NET 9 的后繼版本,將作為長期支持維護 (LTS) 版本提供 3 年的支持。
下載 .NET 10
- https://dotnet.microsoft.com/zh-cn/download/dotnet/10.0
圖片
.NET runtime
.NET 10 運行時在 Preview 1 中引入了新特性與性能改進,核心目標之一是降低常用語言特性的抽象開銷(如虛方法調(diào)用)。為此,JIT 編譯器的去虛擬化能力已擴展至數(shù)組接口方法,可優(yōu)化包含虛方法調(diào)用的數(shù)組遍歷代碼。此外,JIT 支持對不含 GC 指針的固定大小值類型數(shù)組進行棧分配,減少引用類型的內(nèi)存開銷。
另一重要特性是新增對 x64 處理器的 AVX10.2 指令集支持(默認關(guān)閉)。由于當前硬件尚未普及,開發(fā)者需等待支持 AVX10.2 的 CPU 上市后,通過 System.Runtime.Intrinsics.X86.Avx10v2 類測試新內(nèi)在函數(shù)。
.NET libraries
.NET 10 類庫新增多項功能:
- FindByThumbprint 方法支持非 SHA-1 哈希算法(如 SHA-256)搜索證書指紋。
X509Certificate2Collection coll = store.Certificates.FindByThumbprint(HashAlgorithmName.SHA256, thumbprint);
Debug.Assert(coll.Count < 2, "Collection has too many matches, has SHA-2 been broken?");
return coll.SingleOrDefault();
- 新增直接讀取 ASCII 編碼的 PEM 格式文件支持。
- ISOWeek 類擴展 DateOnly 類型兼容性,簡化周數(shù)計算(https://github.com/dotnet/runtime/blob/main/src/libraries/System.Private.CoreLib/src/System/Globalization/ISOWeek.cs)。
public static class ISOWeek
{
// 新的重載方法
public static int GetWeekOfYear(DateOnly date);
public static int GetYear(DateOnly date);
public static DateOnly ToDateOnly(int year, int week, DayOfWeek dayOfWeek);
}
- ZipArchive 性能和內(nèi)存改進。
- OrderedDictionary<TKey,TValue> 的 TryAdd 和 TryGetValue 方法返回條目索引,便于快速定位。
public class OrderedDictionary<TKey, TValue>
{
// 新的重載方法
public bool TryAdd(TKey key, TValue value, out int index);
public bool TryGetValue(TKey key, out TValue value, out int index);
}
public static void IncrementValue(OrderedDictionary<string, int> orderedDictionary, string key)
{
// Try to add a new key with value 1.
if (!orderedDictionary.TryAdd(key, 1, out int index))
{
// Key was present, so increment the existing value instead.
int value = orderedDictionary.GetAt(index).Value;
orderedDictionary.SetAt(index, value + 1);
}
}
- 允許在 JsonSourceGenerationOptionsAttribute 中指定 ReferenceHandler ,JSON 序列化得到了增強。
- 等等...
.NET SDK
.NET 10 SDK 引入了以下新功能和增強功能:
- 框架提供的包引用修剪:https://learn.microsoft.com/zh-cn/dotnet/core/whats-new/dotnet-10/sdk#pruning-of-framework-provided-package-references
從 .NET 10 開始,NuGet Audit 功能現(xiàn)在可以修剪項目中未使用的框架提供的包引用。此功能默認對所有 net 目標框架(例如 net8.0、net10.0)以及 .NET Standard 2.0 及更高版本啟用。這一改進減少了構(gòu)建過程中需要恢復(fù)(restore)和分析的包數(shù)量,從而可能加快構(gòu)建速度、減少磁盤空間占用,并降低 NuGet Audit 或其他依賴掃描機制的誤報率。
ASP.NET Core
- Blazor:添加了QuickGrid的RowClass參數(shù),以及將Blazor腳本作為靜態(tài)Web資源提供
- OpenAPI:增加了生成 OpenAPI 3.1 文檔以及在 YAML 格式中提供生成的 OpenAPI 文檔的支持。
- 身份驗證和授權(quán):增加了身份驗證和授權(quán)的新功能。
- 為SignalR和Minimal APIs添加了新功能。
.NET MAUI
- 詳細介紹:https://learn.microsoft.com/en-us/dotnet/maui/whats-new/dotnet-10?view=net-maui-9.0
此版本主要針對 .NET MAUI、.NET for Android、.NET for iOS、Mac Catalyst、macOS 和 tvOS 進行了質(zhì)量改進。
EF Core
- LINQ 和 SQL 轉(zhuǎn)換增強功能。
- ExecuteUpdateAsync方法現(xiàn)在支持接受常規(guī)的非表達式形式 Lambda(例如包含代碼塊的語句 Lambda),簡化批量更新操作的異步執(zhí)行代碼編寫。
此更新顯著提升了 EF Core 在處理復(fù)雜查詢。
await context.Blogs.ExecuteUpdateAsync(s =>
{
s.SetProperty(b => b.Views, 8);
if (nameChanged)
{
s.SetProperty(b => b.Name, "foo");
}
});
C# 14
C# 14 引入了許多新特性和增強功能,以提高開發(fā)者的生產(chǎn)力和代碼質(zhì)量。其中一些關(guān)鍵更新包括:
- nameof 支持未綁定的泛型類型。
- 隱式 Span 轉(zhuǎn)換。
- 字段支持的屬性。
- 簡單 Lambda 參數(shù)的修飾符。
- 等...
WinForms
- 與剪貼板相關(guān)的序列化和反序列化更改。
- 棄用了剪貼板 API。
- 新增了與剪貼板相關(guān)的 API。
參考文章
- https://devblogs.microsoft.com/dotnet/dotnet-10-preview-1
- https://learn.microsoft.com/zh-cn/dotnet/core/whats-new/dotnet-10/overview