.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 5 包含下列改進功能與 .NET Core 3.1 相較之下的新功能:
- C# 更新
- F# 更新
- Visual Basic 更新
- System.Text.Json 新功能
- 單一檔案應用程式
- 應用程式修剪
- Windows Arm64 和 Arm64 內建函式
- 傾印偵錯的工具支援
- 執行時間程式庫針對可為 Null 參考型別加上 80% 的批註
- 效能改善:
.NET 5 不會取代 .NET Framework
.NET 5 和更新版本是 .NET 的主要實作,但仍支援.NET Framework 4.x。 沒有計劃將下列技術從 .NET Framework移植到 .NET 5,但 .NET 中有替代方案:
技術 | 建議的替代方案 |
---|---|
Web Form | ASP.NET Core Blazor或Razor 頁面 |
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 月起,Microsoft正式支援 CoreWCF。 不過,針對 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!");
函式指標:公開下列中繼語言的語言建構, (IL) opcode:
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
- 複製 JsonSerializerOptions
- 使用 Web 預設值建立 JsonSerializerOptions