.NET 7 的新功能

.NET 7 是 .NET 6 的後續產品,著重於整合、現代化、簡單且快速。 .NET 7 將以標準期間支援 (STS) 版本 (先前稱為目前版本) 的形式支援 18 個月

本文列出 .NET 7 的新功能,並提供每個新功能的連結。

若要尋找已對於 .NET 7 更新的所有 .NET 文章,請參閱 .NET 文件:.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 更快速的功能,請參閱 .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 進行許多改善。 本文的其他專用章節會提及一些改善。 下表將摘要說明其他一些改善。

描述 API 進一步資訊
支援 TimeSpanTimeOnlyDateTimeDateTimeOffset 型別的微秒和奈秒 - DateTime.Microsecond
- DateTime.Nanosecond
- DateTime.AddMicroseconds(Double)
- 新的 DateTime 建構函式多載

- DateTimeOffset.Microsecond
- DateTimeOffset.Nanosecond
- DateTimeOffset.AddMicroseconds(Double)
- 新的 DateTimeOffset 建構函式多載

- TimeOnly.Microsecond
- TimeOnly.Nanosecond

- TimeSpan.Microseconds
- TimeSpan.Nanoseconds
- TimeSpan.FromMicroseconds(Double)
- 以及其他...
這些 API 表示您不再需要對「刻度」值執行計算,以判斷微秒和奈秒值。 如需詳細資訊,請參閱 .NET 7 Preview 4 部落格文章。
用於讀取、寫入、封存及擷取 Tar 封存的 API System.Formats.Tar 如需詳細資訊,請參閱 .NET 7 Preview 4.NET 7 Preview 6 部落格文章。
將流量保持在安全等級,對 API 進行速率限制來保護資源 System.Threading.RateLimiting NuGet 套件中的 RateLimiter 和其他功能 如需詳細資訊,請參閱在 .NET 中對 HTTP 處理常式進行速率限制宣告 .NET 的速率限制
Stream 讀取所有資料的 API - Stream.ReadExactly
- Stream.ReadAtLeast
Stream.Read 可能會傳回的資料小於流程中可用的資料。 新的 ReadExactly 方法會完全讀取要求的位元組數目,而新的 ReadAtLeast 方法至少會讀取要求的位元組數目。 如需詳細資訊,請參閱 .NET 7 Preview 5 部落格文章。
DateOnlyTimeOnlyInt128UInt128Half 的新型別轉換器 System.ComponentModel 命名空間中:

- DateOnlyConverter
- TimeOnlyConverter
- Int128Converter
- UInt128Converter
- HalfConverter
型別轉換子通常用來將實值型別轉換成字串,以及將字串轉換成實值型別。 這些新的 API 會為最近新增的型別新增型別轉換器。
IMemoryCache 的計量支援 - MemoryCacheStatistics
- MemoryCache.GetCurrentStatistics()
GetCurrentStatistics() 可讓您使用事件計數器或計量 API 來追蹤一個或多個記憶體快取的統計資料。 如需詳細資訊,請參閱 .NET 7 Preview 4 部落格文章。
用來取得和設定 Unix 檔案權限的 API - System.IO.UnixFileMode 列舉
- File.GetUnixFileMode
- File.SetUnixFileMode
- FileSystemInfo.UnixFileMode
- Directory.CreateDirectory(String, UnixFileMode)
- FileStreamOptions.UnixCreateMode
如需詳細資訊,請參閱 .NET 7 Preview 7 部落格文章。
屬性,指出字串中預期的語法類型 StringSyntaxAttribute 例如,您可以使用 [StringSyntax(StringSyntaxAttribute.Regex)] 指定參數的屬性來指定 string 參數預期規則運算式。
在瀏覽器或其他 WebAssembly 架構中執行時,與 JavaScript 互通的 API System.Runtime.InteropServices.JavaScript JavaScript 應用程式可以使用 .NET 7 中的擴充 WebAssembly 支援,重複使用 JavaScript 中的 .NET 程式庫。 如需詳細資訊,請參閱從 .NET 7 中的任何 JavaScript 應用程式使用 .NET

可檢視性

.NET 7 改善了可檢視性。 可檢視性有助於您瞭解應用程式在調整規模時的狀態,而且隨著技術複雜性增加而增加。 .NET 的可檢視性實作主要是以 OpenTelemetry 為基礎所建置。 改善還包括:

如需詳細資訊,請參閱 .NET 7 Preview 4 部落格文章。

.NET SDK

.NET 7 SDK 改善了 CLI 範本體驗。 這也可讓您發佈至容器,以及使用 NuGet 進行中央套件管理。

範本

已對 dotnet new 命令和範本撰寫進行一些受歡迎的改善。

dotnet new

dotnet new CLI 命令會根據範本建立新的專案、設定檔或方案,現在支援索引標籤完成以探索:

  • 可用的範本名稱
  • 範本選項
  • 允許的選項值

此外,為了更加完善,installuninstallsearchlistupdate 子命令不再具有 -- 前置詞。

編寫

範本條件約束是 .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 屬性。

如需詳細資訊,請參閱中央套件管理

P/Invoke 來源產生

.NET 7 引進了以 C# 進行平台叫用 (P/Invokes) 的來源產生器。 來源產生器會尋找 static 上的 LibraryImportAttributepartial 以觸發封送處理程式碼的編譯時間來源產生。 藉由在編譯時間產生封送處理程式碼,不需要在執行階段產生 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# 功能改善效能和互通性。 如需詳細資訊,請參閱宣佈 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

對於 Windows Forms for .NET 7 已完成許多工作。 已改善下列領域:

  • 協助工具選項
  • 高 DPI 和縮放比例
  • 資料繫結

如需詳細資訊,請參閱 .NET 7 的 Windows Forms 新功能

WPF

.NET 7 中的 WPF 包含許多錯誤 (bug) 修正,以及效能和協助工具改善。 如需詳細資訊,請參閱 .NET 7 中的 WPF 所具備的新功能部落格文章。

Orleans

Orleans 是一種跨平台架構,用於建置健全且可調整的分散式應用程式。 如需 Orleans 最新更新的資訊,請參閱從 Orleans 3.x 移轉至 7.0

.NET 升級小幫手和 CoreWCF

.NET 升級小幫手現在支援將伺服器端 WCF 應用程式升級至 CoreWCF,這是對於 .NET (Core) 由 WCF 社群建立的連接埠。 如需詳細資訊,請參閱升級 WCF 伺服器端專案以使用 CoreWCF

ML.NET

ML.NET 現在包含文字分類 API,可讓您輕鬆地使用最新的最新深度學習技術來定型自訂文字分類模型。 如需詳細資訊,請參閱 AutoML 的新功能和工具ML.NET 文字分類 API 簡介部落格文章。

另請參閱