您當前的位置:首頁 > 文化

正式釋出:.NET 7 預覽版 1

作者:由 玩轉Github 發表于 文化時間:2022-02-20

宣佈 .NET 7 預覽版 1

Jeremy 2022 年 2 月 17 日

今天,我們很高興地宣佈 。NET 歷史上的下一個里程碑。在慶祝社群和 20 年創新的同時,。NET 7 Preview 1 標誌著邁向 。NET 下一個 20 年的第一步。

http://

ASP。NET

Core Preview 1 和 EF7 Preview 1 也在今天釋出。

。NET 7 建立在 。NET 6 建立的基礎之上,包括一套統一的基礎庫、執行時和 SDK,簡化了開發體驗,提高了開發人員的工作效率。。NET 7 的主要關注領域包括改進對雲原生方案的支援、更容易升級舊專案的工具,以及透過更輕鬆地使用容器來簡化開發人員體驗。

。NET 7 Preview 1 包括對 API 的支援可空性的註解、持續的 JIT 編譯器最佳化、新的 API 以及對更多熱過載方案的支援。

。NET 版本包括產品、類庫、執行時和工具,代表了 Microsoft 內外多個團隊之間的協作。本篇博文中涵蓋的更廣泛的主題並未涵蓋 。NET 7 的所有關鍵場景和投資。它們代表了很大的領域,但只是進入 。NET 7 中所有重要工作的一部分。我們計劃對

http://

ASP。NET

Core、Blazor、EF Core、WinForms、WPF 和其他平臺進行廣泛投資,您可以透過閱讀產品路線圖瞭解關於這些領域的更多資訊:

http://

ASP。NET

Core、Blazor 和 Orleans

EF7

http://

ML。NET

。NET MAUI

WinForms

WPF

NuGet

[Roslyn](

https://

github。com/dotnet/rosly

n/blob/main/docs/Language

Feature Status。md)

您可以下載適用於 Windows、macOS 和 Linux 的。NET 7 Preview 1 。

安裝程式和二進位制檔案

容器映象

Linux 軟體包

發行說明

已知的問題

GitHub 問題跟蹤器

。NET 7 已透過 Visual Studio 17。2 預覽版 1 進行測試。如果您想在 Visual Studio 系列產品中試用 。NET 7,我們建議您使用預覽頻道版本。Visual Studio for Mac 對 。NET 7 預覽版的支援尚不可用,但即將推出。

現代化客戶端:.NET 多平臺應用程式 UI (.NET MAUI)

。NET MAUI 是 。NET 跨平臺原生 UI 的未來,將成為 。NET 7 的一部分。週二,我們釋出了。NET MAUI Preview 13。我們目前專注於為 。NET 6 提供 。NET MAUI 支援,我們預計很快會提供一個候選版本 (RC)。在我們有可用的 RC 後,我們將專注於釋出額外的 RC,直到我們達到一般可用性 (GA) 所需的穩定性。在 。NET MAUI GA 為 。NET 6 釋出後,我們將把它包含在 。NET 7 中,並著眼於改進內部開發迴圈體驗、支援最新的 。NET SDK 工具、更快的應用程式效能、共享更多程式碼以及增強的互操作等主題。檢視。NET MAUI 的狀態和專案路線圖以獲取更多資訊。

現代雲:容器和雲原生

從零開始構建雲原生應用程式,利用基於 Web 的現代資源,例如資料庫服務和託管容器。

雲原生架構可以透過建立獨立於應用程式的其他區域進行部署和擴充套件的自治子系統(通常稱為微服務

)來提高大型應用程式的規模,同時降低長期成本。微服務架構是一種流行的方法,因為它很靈活,旨在發展和擴充套件至單體架構中難以實現的極限。

。NET 7 將透過探索對開發人員體驗的改進來更輕鬆地構建雲原生應用程式,例如:

簡化實施安全身份驗證和授權所需的設定和配置

提高應用程式啟動和執行時執行的效能。

我們將繼續投資Orleans,這是一個 。NET 跨平臺框架,用於構建被稱為“分散式 。NET”的分散式應用程式。我們將繼續增強 Orleans 的綜合文件,並透過改進 Orleans 與Azure App Services和Azure Container Apps等現有云服務的整合,使其更易於使用和實施。

容器是當今許多公司部署雲原生應用程式和微服務的首選方式。依賴容器帶來了一些挑戰,包括管理相容性、構建和釋出映象、讓映象更安全以及簡化映象的大小和效能。我們相信有機會使用 。NET 容器創造更好的體驗。

為了幫助客戶應對這些挑戰,我們計劃使用 。NET 7 中的容器對 。NET 開發進行重大改進。例如,我們將探索透過 MSBuild 直接構建容器作為 SDK 的一項新功能。我們計劃增強遙測以提高容器的可觀察性。我們還將專注於使我們的容器映象更小、更快、更安全,同時探索高要求的應用模型,例如 rootless 和 distroless。

現代化:升級 .NET 應用程式

自 。NET 6 釋出以來,開發人員一直在升級他們的應用程式,以利用新的效能提升、最小 API 和熱過載等生產力特性、新的執行時和 C# 語言創新以及成熟的庫和工具生態系統的可用性。在 。NET 7 中,我們將繼續使您能夠將現有的 。NET 應用程序升級到最新的 。NET 平臺和技術。。NET 升級助手中的更多分析器、程式碼修復程式和對其他應用程式型別的支援將幫助您自信地升級更多應用程式組合,並減少升級所涉及的重複性任務的時間。

我們還知道,每個 。NET 應用程式模型(

http://

ASP。NET

、WinForms、WPF 等)在現代化方面都有其獨特的挑戰,並且可能缺少開發人員所需的功能或平臺本身的支援。對於其中一些,例如 WCF,可能沒有明確的方向。我們將專注於提供適當的指導、文件和工具,以使這些 。NET 應用程式模型更易於升級。

支援

。NET 7 是

Current

版本,這意味著它將在釋出之日起 18 個月內獲得免費支援和補丁。請務必注意,所有版本的質量都是相同的。LTS 和當前版本之間的唯一區別是支援的長度。有關 。NET 支援政策的更多資訊,請參閱。NET 和 。NET Core 官方支援政策。

重大變化

您可以透過閱讀 。NET 7 中的重大更改文件找到最新的 。NET 7 重大更改列表。它按區域和版本列出了重大更改,並附有詳細說明的連結。

要檢視提出了哪些重大更改但仍在稽核中,請關注Proposed 。NET Breaking Changes GitHub 問題。

預覽 1

Preview 1 版本現在提供以下功能。

Microsoft.Extensions 的可空註解

我們在為 Microsoft。Extensions。* 庫添加註解以實現可空性方面取得了進展。在 。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。* 庫新增可空性註釋。您可以檢視剩餘的庫,並在dotnet/runtime#43605處關注進度。

非常感謝 @maxkoshevoi,他為這項工作做出了很大貢獻。如果沒有 @maxkoshevoi 的幫助,我們就不會走得那麼遠。

可觀察性

繼續改進跟蹤 API:

新增

ActivityContext。TryParse

過載以允許解析和建立

ActivityContext

物件,包括是否從遠端父級傳播活動上下文(相關問題)。

新增

Activity。IsStopped()

指示

Activity

物件是否停止的方法(相關問題)。

程式碼生成

社群 PR(非常感謝 JIT 社群貢獻者!!)

來自@am11

將一些舊式內部函式轉換為 NamedIntrinsic runtime#62271

來自@anthonycanino

將額外的二進位制操作新增到 RangeCheck 分析中。runtime#61662

來自@SeanWoo

[JIT] [問題:61620] 針對 *x = dblCns 最佳化 ARM64;runtime#61847

來自@SingleAccretion

在呼叫更好的執行時調整浮點 CSE runtime#63903

調整大小時更新新 CSE 的雜湊 runtime#61984

重寫欄位選擇並始終在 VN 規範化 SIMD 型別 runtime#61370

新增有關 VN 如何編號記憶體的文件 runtime#60476

改進強制轉換數值 runtime#59841

在塊 morphing 中的複雜本地地址下的地址暴露本地變數 runtime#63100

處理嵌入式分配時複製傳播 runtime#63447

異常集:偵錯程式檢查和修復 runtime#63539

在 emitOutputAM 實現“moffset”編碼大小最佳化 runtime#62896

壓縮運算元種類陣列並最佳化 OperIsLocal runtime#63253

使 gtHasRef 關注 LCL_FLD 節點 runtime#62568

為 GT_LCL_FLD 啟用全域性常量傳播 runtime#61209

為小型型別啟用全域性常量傳播 runtime#57726

fgMemoryVNForLoopSideEffects 屬性型別主選擇器 runtime#60505

來自@RalfKornmannEnvision

CoreRT 支援 ARM64&Unix runtime#41023

來自@weilinwa

基於覆寫最佳化 FMA 程式碼生成 runtime#58196

動態 PGO

對 Arm64 的 OSR 支援

JIT:支援同步方法的 OSR

JIT:處理 OSR、PGO 和尾呼叫的互動

新增 2009 Jit 架構計劃(節選)

JIT:一些 relops 的有限版本的前向替換

JIT:為後期去虛擬化儲存泛型上下文

Arm64

Arm64:記憶體屏障改進

正式釋出:.NET 7 預覽版 1

在 InitBlkUnroll/CopyBlkUnroll 中使用 SIMD 操作並將展開限制增加到 128 位元組

[Arm64] 繼續展開 InitBlock 和 CopyBlock 最多 128 位元組

‘cmeq’ 和 ‘fcmeq’ Vector64。Zero/Vector128。Zero ARM64 包含最佳化

[arm64] JIT: X % 2 == 0 -> X & 1 == 0

[arm64] JIT:新增符號/零擴充套件

[arm64] JIT:為“arrayBase + elementOffset”啟用 CSE/提升

[arm64] JIT:將“A * B + C”摺疊為 MADD/MSUB

迴圈最佳化

泛化迴圈前標頭建立和迴圈提升

迴圈重構和註釋改進

通用最佳化

加速其他跨平臺硬體內在函式

使用 SIMDAsHWIntrinsic 實現 Narrow 和 Widen

新增 IsKnownConstant jit 助手並使用 str。StartsWith(‘c’) 最佳化 ‘str == “”’

允許 JIT 在將 HFA/HVA 作為引數/返回值傳遞時將它們保留在暫存器中

為 Vector64/128/256 啟用對 nint/nuint 的支援

新增對 X86Base。Pause() 和 ArmBase。Yield() 的支援

將 PAL 中的首選區域用於 JIT reloc 提示

支援 R2R 中的快速尾呼叫

允許在 x64 上的尾呼叫中包含間接定址

更一般地最佳化間接單元呼叫序列

避免為委託呼叫建立額外的本地

互操作:p/Invoke 程式碼生成

我們將在 。NET 6 中原型化的 p/invoke 源生成器(Source Generator) 整合到 dotnet/runtime 中,並且一直在轉換執行時庫以使用它。這意味著轉換後的 p/invokes 與 AOT 相容,不再需要在執行時生成 IL Stub。

我們打算在未來使 p/invoke 源生成器在執行時之外可用。您可以在dotnet/runtime#60595中關注我們剩餘的工作。

System.Text.Json 中的新 API

System。Text。Json 附帶了一些小的生命週期增強功能:

開發人員現在可以訪問System。Text。Json 內部使用的預設單例

JsonSerializerOptions

(相關問題)。

新增一個

JsonWriterOptions。MaxDepth

屬性並確保此值來自序列化的

JsonSerializerOptions。MaxDepth

等效屬性(相關問題)。

Patch

方法新增到

System。Net。Http。Json

(相關問題)。

熱過載改進

現在允許在 C# 熱過載中為 Blazor WebAssembly 和 。NET 為 iOS 和 Android 進行以下編輯(相關問題):

向現有方法新增靜態 lambda

將捕獲這個的 lambda 新增到已經有至少一個捕獲這個的 lambda 的現有方法中

向現有類新增新的靜態或非虛擬例項方法

向現有類新增新的靜態欄位

新增新類

已知的問題:

不支援新增類中的例項欄位

現有或新類中新新增的方法和欄位對反射不可見

您可以在dotnet/runtime#57365中關注我們的進度

指定 .NET 7

要使用 。NET 7,您需要在專案檔案中使用 。NET 7 Target Framework Moniker (TFM)。例如:

net7。0

全套 。NET 7 TFM,包括特定於作業系統的 TFM。

net7。0

net7。0-android

net7。0-ios

net7。0-maccatalyst

net7。0-macos

net7。0-tvos

net7。0-windows

我們希望從 。NET 6 升級到 。NET 7 應該很簡單。請報告您在使用 。NET 7 測試現有應用程式的過程中發現的任何重大更改。

結語

Microsoft 的全球多元化工程師團隊與高度參與的開發人員社群合作,正在構建 。NET 7。廣泛的 。NET 社群,包括從學生和愛好者到開源貢獻者和企業客戶的每個人,是 。NET 的核心,他們提出新想法,定期貢獻程式碼,並推動 。NET 生態系統向前發展。我們感激並感謝您的支援、貢獻和見解。

歡迎使用 。NET 7。

轉載:。NET 7 預覽版 1 釋出 - WeihanLi - 部落格園