.NET 5 中的新功能
.NET 5 為 .NET Core 3.1 後的下一個主要版本。 基於兩個原因,我們將此新版本命名為 .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 Form | ASP.NET Core Blazor 或 Razor Pages |
Windows Workflow (WF) | Elsa-Workflows |
Windows Communication Foundation
僅支援 Windows 進行 Windows Communication Foundation (WCF) 的原始實作。 不過,有一個用戶端連接埠可從 .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 月起,Microsoft 正式支援 CoreWCF。 但請考慮 gRPC 作為 WCF 的替代方案。
.NET 5 不會取代 .NET Standard
新的應用程式開發可指定所有專案類型的 net5.0
目標 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
。最上層語句:可省略方法
Main
以加速採用和學習 C#,簡單有效的應用程式如下列範例:System.Console.Write("Hello world!");
函式指標:語言建構,且公開下列中繼語言 (IL) 作業碼:
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 和 HttpContent 擴充方法
- 允許或寫入引號中的數字
- 支援不可變的類型和 C# 9 記錄
- 支援非公用屬性存取子
- 支援欄位
- 有條件忽略屬性
- 支援非字串機碼字典
- 允許自訂轉換器處理 Null
- Copy JsonSerializerOptions
- 使用 Web 預設值建立 JsonSerializerOptions