作者:Richard
翻譯:精緻碼農-王亮
說明:文章太長,後面關於 C# 9 語言新特性及平臺新特性的部分沒有翻譯,這部分基本都是程式碼示例,請直接閱讀原文。關於 C# 9 新特性的介紹也可以閱讀我的系列文章[C# 9.0 新特性]。
我們很高興今天(美:11 月 10 日,中:11 月 11 日)能釋出 .NET 5.0。這是一個主要版本--包括 C# 9 和 F# 5--具有一系列廣泛的新功能和引人注目的改進。微軟和其他公司的團隊已經在生產和效能測試中積極使用它。這些團隊向我們展示了巨大的成果,展示了效能的提升、降低了的 Web 應用程式託管成本。從 Preview 1 開始,我們已經在 5.0 上執行了自己的網站。從我們目前的所見所聞來看,.NET 5.0 帶來了巨大的價值,而且升級無需進行較大的改動。對於你的下一個應用程式來說,它是一個很好的選擇,並且可以從早期的 .NET Core 版本直接升級。我們希望能讓你喜歡在桌上型電腦、膝上型電腦和雲端計算例項中使用它。
ASP.NET Core 和 EF Core 也在今天釋出。
你可以下載適用於 Windows,macOS 和 Linux 的 .NET 5.0(適用於 x86、x64、Arm32 和 Arm64 架構的 CPU ):
對於 Visual Studio 使用者,你需要Visual Studio 16.8或更高版本才能在 Windows 上使用.NET 5.0,並在 macOS 上使用 Visual Studio for Mac的最新版本。Visual Studio Code 的 C#擴充套件 已經支援.NET 5.0 和 C#9.0 了。
.NET 5.0 是我們.NET 統一歷程中的第一個版本。我們構建.NET 5.0 是為了讓更多的開發者能夠將他們的.NET Framework 程式碼和應用程式遷移到.NET 5.0 中。我們還在 5.0 中完成了許多早期工作,以便 Xamarin 開發人員能夠在我們釋出.NET 6.0 時使用統一的.NET 平臺。關於.NET 統一的問題,後面還有更多內容。
現在是一個很好的時機來呼籲與每個為.NET 專案做出貢獻的人進行美好的合作。現在官方的 GitHub中有大量的個人和大大小小的公司(包括.NET 基金會公司贊助商)組成的大型社群,就.NET 的各個方面共同協作。.NET 5.0 的改進是許多人的努力、聰明的想法以及他們對平臺的關心和熱愛的結果,所有這些都超過了微軟對專案的管理。我們向每一位為.NET 5.0(以及之前的版本)做出貢獻的人致以深深的謝意。
我們早在 2019 年 5 月就引入了.NET 5.0,甚至還設定了 2020 年 11 月的釋出日期。在那篇文章中可以看到:“我們將在今年 9 月釋出.NET Core 3.0,在 2020 年 11 月釋出.NET 5,然後我們打算每年 11 月釋出一次主要版本的.NET。” 你會認為 "2020 年 11 月 "是一張無法兌現的支票,因為今年面臨著種種挑戰。然而,.NET 5.0 已經按時釋出。感謝團隊中的每一個人,讓這一切得以實現!我知道這並不容易。展望未來,你應該期待 2021 年 11 月的.NET 6.0。我們打算每年 11 月釋出新的.NET 版本。
本篇部落格的其餘部分專門強調並詳細介紹了.NET 5.0 中的大部分改進。此外,還更新了我們的.NET 統一願景。
.NET 5.0 亮點
.NET 5.0 有許多重要的改進:
- .NET 5.0 已經經過了實戰檢驗,已在 dot.net 和 Bing.com 部署了好幾個月。
- 在許多元件中,效能得到了極大的提高,在.NET 5.0 中的效能改進、.NET 5.0 中的 Arm64 效能和gRPC中都有詳細介紹。
- C#9 和 F#5 提供了新的語言改進,例如 C#9 的頂級程式和記錄,而 F#5 提供了互動式程式設計,並提高了.NET 上的功能性程式設計的效能。
- .NET 庫增強了Json 序列化,正規表示式和 HTTP(HTTP 1.1、HTTP/2)的效能。
- 由於GC、分層編譯等方面的改進,P95 延遲有所下降。
- 應用部署選項更多更方便了,有了 ClickOnce 客戶端應用釋出、單檔案應用程式、容器映象尺寸減小,並增加了 Server Core 容器映象。
- 平臺範圍擴大,增加了Windows Arm64和WebAssembly。
我為.NET 5.0 預覽文章編寫了許多示例。你可能想看看 .NET 5.0 示例以瞭解有關 C#9 和庫的新功能的更多資訊。
平臺和微軟支援
.NET 5.0 具有與 .NET Core 3.1 幾乎相同的平臺支援矩陣,適用於 Windows、macOS 和 Linux。如果你在受支援的作業系統上使用 .NET Core 3.1,你應該能夠在同一作業系統版本上採用 .NET 5.0 的大部分內容。.NET 5.0 最重要的新增功能是 Windows Arm64。
.NET 5.0 是一個當前版本。這意味著它將在.NET 6.0 釋出後的三個月內得到支援。因此,我們預計將支援 .NET 5.0 到 2022 年 2 月中旬。.NET 6.0 將是一個 LTS 版本,並將像 .NET Core 3.1 一樣支援三年。
統一平臺願景
去年,我們分享了一個統一的 .NET 協議棧和生態系統的願景。對你的價值在於,你將能夠使用一套單一的 API、語言和工具來針對廣泛的應用型別,包括移動、雲、桌面和物聯網。你可能會意識到,今天你已經可以使用 .NET 瞄準一組廣泛的平臺,然而,工具和 API 在 Web 和 Mobile 之間並不總是相同的,也不總是同時釋出的。
作為 .NET 5.0 和 6.0 的一部分,我們正在將 .NET 統一為一個單一的產品體驗,同時使你能夠只選擇你想要使用的 .NET 平臺的一部分。如果你想針對 Mobile 而不是 WebAssembly,你不需要下載 WebAssembly 工具,反之亦然,ASP.NET Core 和 WPF 也一樣。你也將有一個更簡單的方法從命令列獲取所有你需要的 .NET 工具和執行時包。我們正在為 .NET 平臺元件啟用包管理器體驗(包括使用現有的包管理器)。這對於很多場景來說都會有很大的幫助。開發環境的快速構建和 CI/CD 可能會是最大的受益者。
我們原本打算用 .NET 5.0 來提供全部的統一願景,但在全球大流行之後,我們不得不適應客戶不斷變化的需求。我們一直在與來自世界各地的公司團隊合作,這些公司需要幫助他們加快採用雲技術。他們也必須適應客戶不斷變化的需求。因此,我們正在通過兩個版本來實現這一願景。
實現這一願景的第一步是整合.NET 資源庫,包括 Mono 的大部分子集。為 .NET 的執行時和庫提供一個資源庫是在所有地方提供相同產品的前提條件。它還有助於進行影響執行時和庫的廣泛更改,而以前的版本庫是有邊界的。有些人擔心一個大的 repo 會更難管理,事實證明並非如此。
在 .NET 5.0 版本中,Blazor 是利用 repo 整合和.NET 統一的最好例子。現在,Blazor WebAssembly的執行時和庫都是由合併後的dotnet/runtime repo 構建的。這意味著 Blazor WebAssembly 和伺服器上的 Blazor 使用完全相同的程式碼,例如List<T>
。在.NET 5.0 之前,Blazor 的情況並非如此。我們對 Blazor WebAssembly 採用的方法與我們在 .NET 6.0 中對 Xamarin 採用的方法非常相似。
.NET Framework 仍然是微軟支援的產品,並將繼續支援每個新版本的 Windows。我們去年宣佈,我們已經停止向 .NET Framework 新增新功能,並完成了向 .NET Core 新增 .NET Framework API 的工作。這意味著,現在是考慮將你的 .NET Framework 應用程式轉移到 .NET Core 的好時機。對於 .NET Framework 客戶端開發者來說,.NET 5.0 支援 Windows Forms 和 WPF。我們從許多開發人員那裡聽說,可以直接從 .NET Framework 移植。對於.NET Framework 伺服器開發者來說,你需要採用 ASP.NET Core 來使用 .NET 5.0。對於 Web Forms 開發人員來說,我們認為 Blazor 提供了類似的開發體驗,其實現效率更高、更現代化。WCF 伺服器和工作流使用者可以尋找支援這些框架的社群專案。從 .NET Framework 到 .NET Core 的移植文件是一個很好的開始。說了這麼多,如果你對自己的體驗感到滿意的話,將你的應用保持在 .NET Framework 上是一個不錯的方法。
Windows 團隊正在研究 Project Reunion,作為 UWP 和相關技術的下一步任務。我們一直在與 Reunion 團隊合作,以確保 .NET 5.0 及以後的版本能夠與 WinUI 和 WebView2 良好地配合。
讓我們一起來看看 5.0 版本有哪些新內容。
譯註:原文後面概括了一些 C# 9 語言新特性及平臺新特性,基本都是程式碼示例,請移步原文檢視(老夫實在翻譯不動了)。關於 C# 9 新特性更詳細的介紹可以閱讀我的系列文章[C# 9.0 新特性],該系列還會繼續更新。