時機決定一切,對於 .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,執行時和語言功能。
.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)。
- 在GitHub上開源和麵向社群。
- 跨平臺實現。
- 支援利用特定於平臺的功能,例如Windows窗體和Windows上的WPF,以及從Xamarin到每個本機平臺的本機繫結。
- 高效能。
- 並排安裝。
- 小型專案檔案(SDK樣式)。
- 功能強大的命令列介面(CLI)。
- Visual Studio,適用於Mac的Visual Studio和Visual Studio Code整合
以下是新內容:
- 您將在執行時體驗上有更多選擇(下面更多內容)。
- Java互操作性將在所有平臺上可用。
- 在多個作業系統上將支援Objective-C和Swift的互操作性。
- CoreFX將得到擴充套件,以支援.NET的靜態編譯(提前-AOT),更小的佔用空間以及對更多作業系統的支援。
- .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未來的主要實現,而 .NET Framework 4.x 仍受微軟的技術支援。
微軟沒有計劃將以下技術從.NET Framework移植到.NET 5.0,但在.NET 5.0 中有替代方案:
在最初的概念中,認為所有 .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。
對於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