.NET 7 的新功能
.NET 7 是 .NET 6 的繼任者,著重於統一、現代化、簡單且 快速。 .NET 7 將
本文列出 .NET 7 的新功能,並提供每個功能的詳細信息連結。
性能
效能是 .NET 7 的主要焦點,其所有功能都是以效能為考慮而設計。 此外,.NET 7 也包含下列純粹針對效能的增強功能:
- 堆疊取代 (OSR) 是階層式編譯的補充。 它可讓運行時間變更目前執行中方法在其執行期間所執行的程序代碼(也就是,在堆棧上時)。 執行時間較長的方法可以在執行過程中切換至更優化的版本。
- 剖析資料導向最佳化(PGO)現在可以與 OSR 搭配運作,並且更容易啟用(只需在你的專案檔中新增
<TieredPGO>true</TieredPGO>
)。 PGO 也可以檢測並優化其他專案,例如委派。 - 已改進 Arm64 的程式碼生成。
- 原生 AOT 在目標平臺的檔案格式中產生獨立可執行檔,且沒有外部相依性。 它完全是原生的,沒有 IL 或 JIT,並且提供快速的啟動時間和小巧、獨立的部署方案。 在 .NET 7 中,原生 AOT 著重於控制台應用程式,而且需要修剪應用程式。
- Mono 執行環境的效能改善,驅動 Blazor WebAssembly、Android 和 iOS 應用程式。
若要深入了解舉例來說 .NET 7 中許多提升速度的效能功能,請參閱 部落格文章中的
System.Text.Json 序列化
.NET 7 包含在下列領域對 System.Text.Json 序列化的改善:
- 合約自定義 可讓您更充分掌控型別的序列化和反序列化方式。 如需詳細資訊,請參閱 自定義 JSON 合約。
- 使用者定義型別階層的多態序列化。 如需詳細資訊,請參閱 串行化衍生類別的屬性。
- 支援 的必備成員是 JSON 數據中必須存在的屬性,才能確保反序列化成功。 如需詳細資訊,請參閱 必要屬性。
如需了解這些和其他更新,請參閱關於 .NET 7 中 System.Text.Json 新功能的部落格文章 。
泛型數學
.NET 7 和 C# 11 包含創新功能,可讓您一般執行數學運算,也就是說,不需要知道您正在使用的確切類型。 例如,如果您想要撰寫一個將兩個數字相加的方法,先前您必須為每個類型新增一個方法的多載。 現在您可以撰寫單一泛型方法,其中 type 參數限制為類似數位的類型。 如需詳細資訊,請參閱 泛型數學 文章和 泛型數學 部落格文章。
正則表達式
.NET 的 正則表示式 函式庫在 .NET 7 中取得了顯著的功能和效能提升:
新的選項 RegexOptions.NonBacktracking 使用一種可避免回溯的方式進行比對,並保證按輸入長度進行線性時間處理。 非回溯引擎無法在從右到左的搜尋中使用,還有其他一些限制,但對於所有正則表達式和輸入而言,運行速度快。 如需詳細資訊,請參閱 非回溯模式。
正則表示式的來源生成器是新推出的。 來源產生器會在編譯階段建置針對 模式優化的引擎,以提升效能表現。 發出的來源是專案的一部分,因此您可以檢視和偵錯它。 此外,新的程式碼產生器診斷
SYSLIB1045
會提醒您,可以將您在某些地方使用的 Regex 轉換成程式碼產生器。 如需詳細資訊,請參閱.NET 正則表達式來源產生器。 對於不區分大小寫的搜尋,.NET 7 包含大量的效能提升。 由於指定 RegexOptions.IgnoreCase 不再在模式的每個字元和輸入的每個字元上呼叫 ToLower,因此得到了優化的效益。 相反地,當建構 Regex 時,所有與大小寫有關的工作就已經完成。
Regex 現在支援某些 API 的範圍。 下列新方法已新增為此支援的一部分:
如需這些和其他改善的詳細資訊,請參閱 .NET 7 部落格文章中的
.NET 程式庫
已對 .NET 連結庫 API 進行許多改進。 本文的其他專用章節會提及一些。 下表摘要說明其他部分。
可觀察性
.NET 7 可改善 可觀察性。 可觀測性能協助您瞭解應用程式在擴展及技術複雜性增加時的狀態。 .NET 的可觀察性實作主要是以 openTelemetry
- 新的 Activity.CurrentChanged 事件,可用來偵測 Managed 線程的跨度內容何時變更。
- Activity 屬性的高效能新列舉器方法:EnumerateTagObjects()、EnumerateLinks()和 EnumerateEvents()。
如需詳細資訊,請參閱 .NET 7 Preview 4 部落格文章。
.NET SDK
.NET 7 SDK 可改善 CLI 範本體驗。 它還能支援發佈至容器和使用 NuGet 的集中式套件管理。
範本
已對 dotnet new
命令和範本編寫進行了一些受人歡迎的改進。
dotnet new
dotnet new
CLI 命令會根據範本建立新的專案、組態檔或解決方案,現在支援 索引標籤完成 來探索:
- 可用的範本名稱
- 範本選項
- 允許的選項值
此外,為了符合更好的規範,install
、uninstall
、search
、list
和 update
子命令不再具有 --
前置詞。
創作
範本 限制是 .NET 7 的一個新概念,可以讓您定義範本允許的情境。 條件約束可協助範本引擎判斷應該顯示在命令中的範本,例如 dotnet new list
。 您可以將範本限製為作業系統、範本引擎主機(例如 Visual Studio 中的 .NET CLI 或 [新增專案] 對話方塊,以及已安裝的工作負載。 您可以在樣本的組態檔中定義條件約束。
此外,在範本組態檔中,您現在可以將範本參數標註為允許多個值。 例如,web
範本 允許多種形式的驗證。
如需詳細資訊,請參閱 .NET 7 Preview 6 部落格文章。
發佈至容器
容器是散發和執行雲端中各種應用程式和服務的最簡單方式之一。 容器映像現在是 .NET SDK 支援的輸出類型,您可以使用 dotnet publish
建立應用程式的容器化版本。 如需此功能的詳細資訊,請參閱 宣佈 .NET SDK的內建容器支援。 如需教學課程,請參閱使用 dotnet publish將 .NET 應用程式容器化
中央包管理系統
您現在可以使用 NuGet 的中央套件管理 (CPM) 功能,從一個位置管理專案中的一般相依性。 若要啟用它,請將 Directory.Packages.props 檔案新增至存放庫的根目錄。 在此檔案中,將 MSBuild 屬性 ManagePackageVersionsCentrally
設定為 true
,並使用 PackageVersion
項目新增通用套件相依性的版本。 然後,在個別項目檔中,您可以省略在引用集中管理套件的 PackageReference 項目中使用的 Version
屬性。
如需詳細資訊,請參閱 Central 套件管理。
P/Invoke 原始碼生成
.NET 7 引進了 C# 中平台調用的來源產生器(P/Invokes)。 來源產生器會在 static
上尋找 LibraryImportAttribute 和 partial
方法,以觸發編組代碼的編譯時來源生成。 藉由在編譯階段產生封送代碼,就不需要在運行時間產生 IL 存根,這和使用 DllImportAttribute時的情況相同。 來源產生器可改善應用程式效能,也允許應用程式預先編譯 (AOT)。 如需詳細資訊,請參閱 平台調用的來源產生 和 在來源產生的 P/Invokes中使用自定義封送器。
相關版本
本節包含與 .NET 7 版本一致之發行的相關產品相關信息。
Visual Studio 2022 17.4 版
如需詳細資訊,請參閱 Visual Studio 2022的新功能。
C# 11
C# 11 包含 泛型數學、原始字元串常值、檔案範圍型別和其他新功能的支援。 如需詳細資訊,請參閱 C# 11 的新功能。
F# 7
F# 7 會繼續進行此旅程,讓語言更簡單,並透過新的 C# 功能改善效能和 Interop。 如需詳細資訊,請參閱 發布 F# 7。
.NET MAUI
.NET 多平臺應用程式 UI (.NET MAUI) 是使用 C# 和 XAML 建立原生行動和桌面應用程式的跨平台架構。 它會將 Android、iOS、macOS 和 Windows API 統一成單一 API。 如需最新更新的相關信息,請參閱 .NET MAUI for .NET 7 的新功能。
ASP.NET Core
ASP.NET Core 7.0 包含速率限制中間件、最低 API 的改善,以及 gRPC JSON 轉碼。 如需所有更新的相關信息,請參閱 ASP.NET Core 7的新功能。
EF Core
Entity Framework Core 7.0 包含 JSON 欄位的與提供者無關的支援、改善儲存變更的效能,以及自訂反向工程範本。 如需所有更新的相關信息,請參閱 EF Core 7.0 的新功能。
Windows Forms
很多心力已投入於適用於 .NET 7 的 Windows Forms。 下列領域已改善:
- 可及性
- 高 DPI 和縮放比例
- 數據系結
如需詳細資訊,請參閱 .NET 7 中 Windows Forms 的新功能。
WPF
.NET 7 中的 WPF 包含許多錯誤修正,以及效能和輔助功能改善。 如需詳細資訊,請參閱 .NET 7 部落格文章中 WPF 的
Orleans
Orleans 是一種跨平台架構,用於建置健全且可調整的分散式應用程式。 如需 Orleans最新更新的相關信息,請參閱 從 Orleans 3.x 移轉至 7.0。
.NET 升級助手和 CoreWCF
.NET 升級小幫手現在支援將伺服器端 WCF 應用程式升級至 CoreWCF,這是由社群建立的 WCF 轉移至 .NET Core 的版本。 如需詳細資訊,請參閱 升級 WCF 伺服器端專案以使用 CoreWCF。
ML.NET
ML.NET 現在包含文字分類 API,可讓您使用最新的最先進的深度學習技術,輕鬆地定型自定義文字分類模型。 如需詳細資訊,請參閱 AutoML 的新功能和工具 和 簡介 ML.NET 文字分類 API 部落格文章。