.NET 5 的新功能
.NET 5 是在 3.1 之後的下一個主要 .NET Core 版本。 此版本名為 .NET 5,而不是 .NET Core 4,原因有兩個:
- 已略過版本號碼 4.x,以避免與 .NET Framework 4.x 混淆。
- “Core” 已從名稱卸除,強調這是 .NET 未來的主要實作。 .NET 5 支援比 .NET Core 或 .NET Framework 更多的應用程式和平台類型。
ASP.NET Core 5.0 是以 .NET 5 為基礎,但會保留名稱 “Core”,以避免 ASP.NET MVC 5 混淆。 同樣地,Entity Framework Core 5.0 會保留名稱 “Core”,以避免與 Entity Framework 5 和 6 混淆。
與 .NET Core 3.1 相比,.NET 5 包含下列改善和新功能:
- C# 更新
- F# 更新
- Visual Basic 更新
- System.Text.Json 新功能
- 單一檔案應用程式
- 應用程式精簡
- Windows Arm64 和 Arm64 內部函數
- 傾印偵錯的工具支援
- 執行時期庫具有 80% 注釋,用於 可為 Null 的參考型別。
- 效能改善:
.NET 5 不會取代 .NET Framework
.NET 5 和更新版本是未來 .NET 的主要實作,但仍支援 .NET Framework 4.x。 沒有計劃將下列技術從 .NET Framework 移植到 .NET 5,但 .NET 中有替代方案:
科技 | 建議的替代方式 |
---|---|
Web 表單 | ASP.NET Core Blazor 或 Razor Pages |
Windows 工作流程 (WF) | Elsa-Workflows |
Windows Communication Foundation
原始的 Windows Communication Foundation (WCF) 實作僅在 Windows 上受到支援。 不過,.NET Foundation 提供了可使用的客戶端埠。 Microsoft完全 開放原始碼、跨平臺及支援。 核心 NuGet 套件如下所列:
- System.ServiceModel.Duplex
- System.ServiceModel.Federation
- System.ServiceModel.Http
- System.ServiceModel.NetTcp
- System.ServiceModel.Primitives
- System.ServiceModel.Security
可透過 CoreWCF取得與上述用戶端程式庫相輔相成的伺服器元件。 自 2022 年 4 月起,CoreWCF 正式支援 Microsoft。 不過,作為 WCF 的替代方案,請考慮 gRPC。
.NET 5 不會取代 .NET Standard
新開發的應用程式可以為所有專案類型,包括類別函式庫,指定 net5.0
Target Framework Moniker (TFM)。 在 .NET 5 不同工作負載之間共用程式碼的過程變得簡單:您只需要使用 net5.0
TFM。
針對 .NET 5 應用程式和連結庫,net5.0
TFM 會結合並取代 netcoreapp
和 netstandard
TFM。 不過,如果您打算在 .NET Framework、.NET Core 和 .NET 5 工作負載之間共用程式代碼,您可以將 netstandard2.0
指定為 TFM 來執行此動作。 如需詳細資訊,請參閱 .NET Standard。
C# 更新
撰寫 .NET 5 應用程式的開發人員將有權存取最新的 C# 版本和功能。 .NET 5 與 C# 9 配對,這為語言帶來了許多新功能。 以下是一些重點:
記錄:具有值基礎的相等語義和由新的
with
表達式支持的非破壞性變更之參考型別。關係模式比對:將模式比對功能延伸至關係型運算符,以進行比較評估和表達式,包括邏輯模式 - 新的關鍵詞
and
、or
和not
。最上層語句:作為加速採用和學習 C# 的方法,可以省略
Main
方法,而且應用程式就像下列範例一樣簡單:System.Console.Write("Hello world!");
函式指標:公開下列中繼語言的語言結構:
ldftn
和calli
。
如需可用 C# 9 功能的詳細資訊,請參閱 C# 9 的新功能。
來源產生器
除了幾個突顯的新 C# 功能外,來源產生器正逐漸進入開發者的專案中。 來源產生器允許在編譯期間執行的程式碼檢查您的程式,並產生與其他程式碼一起編譯的額外檔案。
如需來源產生器的詳細資訊,請參閱 C# 來源產生器簡介 和 C# 來源產生器範例。
F# 更新
F# 是 .NET 功能程式設計語言,而使用 .NET 5,開發人員可以存取 F# 5。 其中一項新功能是插補字串,類似於 C# 中的插補字串,甚至是 JavaScript。
let name = "David"
let age = 36
let message = $"{name} is {age} years old."
除了基本字串插補之外,還有類型化的插補。 使用具型別插值時,指定的型別必須符合格式規範。
let name = "David"
let age = 36
let message = $"%s{name} is %d{age} years old."
此格式類似於 sprintf
函式,該函式會根據型別安全輸入來格式化字串。
如需詳細資訊,請參閱 F# 5 的新功能。
Visual Basic 更新
.NET 5 中沒有 Visual Basic 的新語言功能。 不過,使用 .NET 5,Visual Basic 支援會延伸至:
描述 |
dotnet new 參數 |
---|---|
主控台應用程式 | console |
類別庫 | classlib |
WPF 應用程式 | wpf |
WPF 類別庫 | wpflib |
WPF 自定義控制項程式庫 | wpfcustomcontrollib |
WPF 使用者控制項程式庫 | wpfusercontrollib |
Windows Forms (WinForms) 應用程式 | winforms |
Windows Forms (WinForms) 類別庫 | winformslib |
單元測試專案 | mstest |
NUnit 3 測試專案 | nunit |
NUnit 3 測試專案 | nunit-test |
xUnit 測試專案 | xunit |
如需 .NET CLI 中項目範本的詳細資訊,請參閱 dotnet new
。
System.Text.Json 新功能
System.Text.Json中有新功能:
- 保留參考並處理循環參考
- HttpClient 上的序列化擴充方法
- 允許使用或在引號中書寫數字
- 支援不可變類型及 C# 9 的記錄
- 支援非公用屬性存取子
- 支援欄位
- 條件式忽略屬性
- 支援非字串索引鍵字典
- 允許自定義轉換器處理 null
- 複製 JsonSerializerOptions
- 使用 Web 預設值建立 JsonSerializerOptions
另請參閱
- 統一 .NET 的旅程
- .NET 5 中的 效能改善
- 下載 .NET SDK