系列目錄 【已更新最新開發文章,點選檢視詳細】
時機決定一切,對于 .NET5 也是如此。實際上微軟.NET團隊在開始開發 .NET Core 時,對 .NET Framework 的全面重寫是不可想象的。當時Microsoft 正在響應在 Linux、容器中和 PaaS 上顯著增強 Azure 托管體驗的需求。是以,公司專注于推出一些産品來滿足客戶和 Azure 産品團隊的需求。
在 .NET Core 2.0 中,任務擴充到比對 .NET Framework 中的功能。同樣,團隊專注于釋出一些可行的産品,而不是盲目地推出過多産品。但随着 .NET Core 3.0 的釋出和 .NET Standard 2.1 的實作,情況開始發生變化。當一個新功能或 bug 出現時,必須對三個不同架構進行更改,這種想法令人産生煩惱,而且會産生額外的費用。和任何優秀的開發人員一樣,微軟很快就萌生了将代碼盡可能多地重構為單個代碼庫的想法。
是以,.NET5誕生了。統一每個架構所有功能的想法也随之誕生 - 無論是簡單的 csproj 格式、采用開放源代碼開發模型、支援與 Java 和 Objective-C(包括 Swift)的互操作性,還是支援 JIT 和 AOT 編譯。
.NET5.0 于2020年11月10日正式釋出,它是3.1之後的 .NET Core 的下一個主要版本。微軟将這個新版本命名為 .NET 5.0 而不是 .NET Core 4.0,其原因有兩個:
- 跳過了版本号4.x,以避免與 .NET Framework 4.x 混淆。
- 從名稱中删除了“ Core”,以強調這是.NET未來的主要實作。與 .NET Core 或 .NET Framework 相比,.NET 5.0 支援更多類型的應用程式和平台。
ASP.NET Core 5.0 基于 .NET 5.0,但保留名稱“ Core”以避免将其與 ASP.NET MVC 5 混淆。同樣,Entity Framework Core 5.0保留名稱“ Core”以避免将其與 Entity Framework5、Entity Framework6 混淆。
微軟稱将來隻會有一個.NET平台,使用它可以開發 Windows、Linux、macOS、iOS、Android、tvOS、watchOS和WebAssembly等平台的應用。.NET 5中引入了新的.NET API,運作時和語言功能。

.NET5統一了不同的開發架構、減少了代碼複雜性,并顯著提高了跨平台的可實作性。
.NET 5 = .NET Core vNext
.NET 5 是下一代 .NET Core。該項目旨在通過以下幾個關鍵方式來改進.NET:
- 建立一個可在任何環境使用的 .NET 運作時和架構,并具有統一的運作時行為和開發者體驗。
- 通過充分利用 .NET Core、.NET Framework、Xamarin 和 Mono 來擴充 .NET 的功能。
- .NET5 由許多單個代碼庫建構組成,開發者(微軟員工、社群志願者、個人開發者)可以一起工作并擴充功能,進而改進方案。
- 這個新項目和方向是.NET的一個重要轉折點。無論開發者建構哪種類型的應用程式,通過 .NET5 編寫的代碼和項目檔案都是相同的。每個應用都可以通路相同的API、運作時和語言功能,并受益于幾乎每天都在運作的CoreFX的性能改進。
.NET5 讓 .NET Core、.NET Framework 和 Mono(Xamarin)走向統一,并且打通七大開發方向(桌面應用、Web應用、雲服務、移動開發、遊戲開發、物聯網IoT、人工智能AI)。
您喜愛的.NET Core的一切都将繼續存在:
- 在GitHub上開源和面向社群。
- 跨平台實作。
- 支援利用特定于平台的功能,例如Windows窗體和Windows上的WPF,以及從Xamarin到每個本機平台的本機綁定。
- 高性能。
- 并排安裝。
- 小型項目檔案(SDK樣式)。
- 功能強大的指令行界面(CLI)。
- Visual Studio,适用于Mac的Visual Studio和Visual Studio Code內建
以下是新内容:
- 您将在運作時體驗上有更多選擇(下面更多内容)。
- Java互操作性将在所有平台上可用。
- 在多個作業系統上将支援Objective-C和Swift的互操作性。
- CoreFX将得到擴充,以支援.NET的靜态編譯(提前-AOT),更小的占用空間以及對更多作業系統的支援。
.NET 5.0的亮點
- .NET5.0 已經在dot.net 和 Bing.com (version) 2個重量級産品(網站)上運作了數月,經過了嚴苛的測試與實戰檢驗。
- .NET5.0 性能在許多元件中得到了極大的提升。在 Performance Improvements in .NET 5.0,Arm64 Performance in .NET 5.0,and gRPC 連結文章中有詳細的描述。
- C#9和F#5提供了新的語言改進,例如C#9的頂級程式和記錄,而F#5提供了互動式程式設計,并提高了.NET上的功能性程式設計的性能。
- .NET5庫增強了Json序列化,正規表達式 和HTTP(HTTP 1.1,HTTP / 2)的性能。現在,它們也被完全注釋為可空性。
- 由于GC、分層編譯和其他方面的改進,P95延遲已經下降。
- 通過ClickOnce用戶端應用程式釋出,單檔案應用程式,減小的容器映像大小以及添加的Server Core容器映像,應用程式部署選項更好。
- 平台範圍通過 Windows ARM64 和 WebAssembly 擴充。
微軟為.NET5.0寫了很多示例,請參考:https://gist.github.com/richlander/50c34a8714eb3436e5d9d4d5d420776e
.NET 5.0不會替代.NET Framework
.NET 5.0是.NET未來的主要實作,而 .NET Framework 4.x 仍受微軟的技術支援。
微軟沒有計劃将以下技術從.NET Framework移植到.NET 5.0,但在.NET 5.0 中有替代方案:
.NET 5.0不會替代.NET Standard
在最初的概念中,認為所有 .NET Framework 都可以移植到 .NET Core 的想法是不現實的。在 .NET Core 2.0 釋出前後,這種情況開始發生變化。Microsoft 意識到,它需要為所有 .NET 架構版本定義架構标準,使在一個架構上運作的代碼能夠移植到另一個架構上。
此标準後來被稱為“.NET Standard”。其目的在于确定架構需要支援的 API,以便針對标準的庫可以依賴于一組可用的特定 API。事實證明,定義标準然後使用 Xamarin/Mono、.NET Core 和 .NET Framework 實作它,成為使 .NET 5 統一政策成為可能的關鍵元件。
例如,一旦每個架構都實作了支援 .NET Standard API 的代碼,那麼将單獨的代碼庫合并為一個代碼庫(某種程度上的重構)似乎是合乎邏輯的。而且,如果行為不同(例如,JIT 與 AOT 編譯),為什麼不合并代碼,以便所有平台都支援方法和功能呢?這項工作并不簡單,但其結果是在降低複雜性和維護方面向前邁出了一大步,同時将所有平台功能都統一起來。
新的應用程式開發可以為所有項目類型(包括類庫)指定 .NET5.0 目标架構名字對象(TFM)。在.NET5工作負載之間共享代碼得到了簡化,因為您隻需要 NET5.0TFM。
對于.NET 5.0應用程式和庫,NET5.0目标架構名字對象(TFM)組合并替換 netcoreapp 和 netstandard TFMs。但是,如果您計劃在 .NET Framework、.NET Core和.NET 5工作負載之間共享代碼,可以通過指定netstandard2.0作為TFM來實作。有關詳細資訊,請參見 .NET Standard。
平台和Microsoft支援
對于Windows、macOS和Linux,.NET5.0具有與.NETCore3.1幾乎相同的平台支援清單。如果您在受支援的作業系統上使用.NET Core 3.1,那麼您應該能夠在大多數情況下在同一作業系統版本上采用.NET 5.0。.NET5.0最重要的新增功能是Windows ARM64。
.NET5.0是最新版本。這意味着它将在.NET6.0釋出後的三個月内得到支援。是以,我們希望在2022年2月中旬之前支援.NET 5.0。.NET 6.0将是LTS版本,并将像.NET Core 3.1一樣支援三年。
語言能力
C#9和F5是.NET 5.0版本的一部分,并包含在.NET 5.0 SDK中。Visual SDK也包含在5.0 SDK中。它不包括語言更改,但進行了改進以支援.NET Core上的Visual Basic應用程式架構。
C#源代碼生成器是C#編譯器的一項重要重要新功能。從技術上講,它們不屬于C#9,因為它沒有任何語言文法。請參閱新的C#源代碼生成器示例,以幫助您開始使用此新功能。我們希望在.NET 6.0及更高版本的.NET産品中更多地使用源代碼生成器。
為了親自嘗試新版本,我們中的一些人決定更新dotnet / iot存儲庫,以使用新的C#9文法并以.NET 5.0為目标。通過采用新的文法,這些更改導緻删除了超過2k行代碼。它使用頂級程式,記錄,模式和開關表達式。還對其進行了更新,以利用.NET庫中完整的可空注釋集。我們還更新了.NET IoT文檔。
參考文獻:
- .NET5.0 釋出公告:https://devblogs.microsoft.com/dotnet/announcing-net-5-0/
- .NET5.0 簡介:https://devblogs.microsoft.com/dotnet/introducing-net-5/
- .NET5.0 新增功能:https://docs.microsoft.com/zh-cn/dotnet/core/dotnet-five
- .NET5.0計劃:https://docs.microsoft.com/zh-cn/archive/msdn-magazine/2019/july/csharp-net-reunified-microsoft%E2%80%99s-plans-for-net-5
成在管理,敗在經驗;嬴在選擇,輸在不學! 貴在堅持!
歡迎關注作者頭條号 張傳甯IT講堂,擷取更多IT文章、視訊等優質内容。
個人作品
1、BIMFace.Community.SDK.NET開源位址:https://gitee.com/NAlps/BIMFace.SDK
系列部落格:https://www.cnblogs.com/SavionZhang/p/11424431.html
系列視訊:https://www.cnblogs.com/SavionZhang/p/14258393.html
2、ZCN.NET.Common開源位址:https://gitee.com/NAlps/zcn.net.common
技術棧
1、Visual Studio、.C#/.NET、.NET Core、MVC、Web API、RESTful API、gRPC、SignalR、Python
2、jQuery、Vue.js、Bootstrap
3、資料庫:SQLServer、MySQL、PostgreSQL、Oracle、SQLite、Redis、MongoDB、ElasticSearch、TiDB、達夢DM、人大金倉、 神通、南大通用 GBase、華為 GaussDB 、騰訊 TDSQL 、阿裡 PolarDB、螞蟻金服 OceanBase、東軟 OpenBASE、浪潮雲溪資料庫 ZNBase
4、ORM:Dapper、Entity Framework、FreeSql、SqlSugar、分庫分表、讀寫分離
5、架構:領域驅動設計 DDD、ABP
6、環境:跨平台、Windows、Linux(CentOS、麒麟、統信UOS、深度Linux)、maxOS、IIS、Nginx、Apach
7、移動App:Android、IOS、HarmonyOS、微信、小程式、快應用、Xamarin、uni-app、MUI、Flutter、Framework7、Cordova、Ionic、React Native、Taro、NutUI、Smobiler
雲原生、微服務、Docker、CI/CD、DevOps、K8S;
Dapr、RabbitMQ、Kafka、分布式、大資料、高并發、負載均衡、中間件、RPC、ELK;
.NET + Docker + jenkins + Github + Harbor + K8S;
出處:www.cnblogs.com/SavionZhang
作者:張傳甯 微軟MCP、系統架構設計師、系統內建項目管理工程師、科技部創新工程師。
專注于微軟.NET技術(.NET Core、Web、MVC、WinForm、WPF)、通用權限管理系統、工作流引擎、自動化項目(代碼)生成器、SOA 、DDD、 雲原生(Docker、微服務、DevOps、CI/CD);PDF、CAD、BIM 審圖等研究與應用。
多次參與電子政務、圖書教育、生産制造等企業級大型項目研發與管理工作。
熟悉中小企業軟體開發過程:需求分析、架構設計、編碼測試、實施部署、項目管理。通過技術與管理幫助中小企業快速化實作網際網路技術全流程解決方案。
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。
如有問題,可以通過郵件[email protected]聯系。共同交流、互相學習。
如果您覺得文章對您有幫助,請點選文章右下角【推薦】。您的鼓勵是作者持續創作的最大動力!