近日,.NET 7 第一個預覽版 .NET 7 Preview 1 正式釋出。
.NET 7 建立在 .NET 6 建立的基礎之上,包括一套統一的基礎庫、執行時和 SDK,簡化了開發體驗,提高了開發人員的工作效率。.NET 7 的主要關注領域包括改進對雲原生方案的支援、更容易升級舊專案的工具,以及通過更輕鬆地使用容器來簡化開發人員體驗。
.NET 7 Preview1包括對 API 的可空註釋、持續的JIT 編譯器優化、新的 API 以及對更多熱過載方案的支援。
.NET 7 Preview 1 主要更新內容
Microsoft.Extensions 的可空註解
.NET 在註釋 Microsoft.Extensions.* 庫,以實現可空性(nullability)方面取得了進展。在 .NET 7 Preview 1 中,以下庫已針對可空性進行了註釋:
- Microsoft.Extensions.DependencyInjection.Abstractions
- Microsoft.Extensions.Logging.Abstractions
- Microsoft.Extensions.Primitives
- Microsoft.Extensions.FileSystemGlobbing
- Microsoft.Extensions.DependencyModel
- Microsoft.Extensions.Configuration.Abstractions
- Microsoft.Extensions.FileProviders.Abstractions
- Microsoft.Extensions.FileProviders.Physical
- Microsoft.Extensions.Configuration
- Microsoft.Extensions.Configuration.Binder
- Microsoft.Extensions.Configuration.CommandLine
- Microsoft.Extensions.Configuration.EnvironmentVariables
- Microsoft.Extensions.Configuration.FileExtensions
- Microsoft.Extensions.Configuration.Ini
- Microsoft.Extensions.Configuration.Json
我們計劃在 .NET 7 正式釋出時為所有 Microsoft.Extensions.* 庫新增可空性註釋。
可觀察性
繼續改進跟蹤 API:
- 新增ActivityContext.TryParse過載以允許解析和建立ActivityContext物件,包括是否從遠端父級傳播活動上下文(相關問題)。
- 新增Activity.IsStopped指示Activity物件是否停止的方法(相關問題)。
程式碼生成
根據社群意見對程式碼生成進行了改進
- 將一些舊式內部函式轉換為 NamedIntrinsic 。 #62271
- 將額外的二進位制操作新增到 RangeCheck 分析中。#61662
- [JIT] [61620] 針對 *x = dblCns 優化 ARM64;#61847
- CoreRT 支援 ARM64&Unix 。#41023
- 基於覆蓋的 FMA codegen 優化 #58196
動態 PGO
- 對 Arm64 的 OSR 支援
- JIT:支援同步方法的 OSR
- JIT:處理 OSR、PGO 和尾呼叫的互動
- 新增 2009 Jit 架構計劃(節選)
- JIT:一些 relops 的有限版本的前向替換
- JIT:為後期去虛擬化儲存泛型上下文
Arm64
Arm64:記憶體屏障改進
迴圈優化
- 泛化迴圈前標頭建立和迴圈提升
- 迴圈重構和註釋改進
互操作:p/Invoke 程式碼生成
我們將在 .NET 6 中原型化的 p/invoke 源生成器(Source Generator) 整合到 dotnet/runtime 中,並且一直在轉換執行時庫以使用它。這意味著轉換後的 p/invokes 與 AOT 相容,不再需要在執行時生成 IL Stub。
System.Text.Json 中的新 API
System.Text.Json 附帶了一些小的生命週期增強功能:
- 開發人員現在可以訪問 System.Text.Json 內部使用的預設單例JsonSerializerOptions(相關問題)。
- 新增一個JsonWriterOptions.MaxDepth屬性並確保此值來自序列化的JsonSerializerOptions.MaxDepth等效屬性(相關問題)。
- 將Patch方法新增到System.Net.Http.Json
熱過載改進
下列更改適用於 Blazor WebAssembly 和 .NET 的 C# 熱過載
- 向現有方法新增靜態 lambda
- 將捕獲這個的 lambda 新增到已經有至少一個捕獲這個的 lambda 的現有方法中
- 向現有類新增新的靜態或非虛擬例項方法
- 向現有類新增新的靜態欄位
- 新增新類