在我的部落格《.NET平臺系列2 .NET Framework 框架詳解》與 《.NET平臺系列7 .NET Core 體系結構詳解》 兩篇文章中分別詳細介紹了.NET Framewrok與.NET Core 的核心構成以及各部件的組成與原理。本文通過其他維度更加直接的對比說明兩者的差異。
.NET平臺自誕生之日起就具備跨平臺的能力。.NET Framework本身是一個跨平臺的解決方案,在這一基礎上它還支援C#和VB等程式語言,且這些語言共同遵守公共語言規範( Common Language Specification 簡稱CLS),最終生成的應用程式都會被編譯成公共中間語言(Common Intermediate Language 簡稱CIL)或者MSIL(微軟中間語言)執行。從多層架構設計的角度來看,如果想讓它不僅可以在多種 Windows作業系統中執行,也可以在macOS、 Linux作業系統中執行,則主要需要修改架構底層關於作業系統的部分,而原有的多種程式語言實際上與所執行的作業系統關係很小。
對比 .NET Framework 的公共語言執行時(Common Language Runtime 簡稱CLR),.NETCore 重新設計了 CoreCLR,以及一個被稱為 CoreFX 的基礎類庫( Base Class Library 簡稱BCL)。
.NET Framework在不斷升級過程中使自己變得更加強大和完備,但是在另一方面也使得自己變得越來越臃腫。隨著版本的不斷升級,構成.NET Framework的應用模型、BCL和執行時(CLR)都在不斷地膨脹(.NET Framework 2.0/3.x和.NET Framework 4.x分別採用CLR 2.0和CLR 4.0)
.NET Core 是借鑑 .NET Frmawork 的優秀思想與強大功能重新構建的新框架,體積自然要比.NET Framework小的多。如Windows Forms 和 Windows Presentation Foundation(WPF)可用於構建圖形使用者介面(GUI應用程式與Windows生態系統緊密相連,無法跨平臺,因此將他們從 macOS 和 Linux 的 .NET Core 中移除了。
下圖引用微軟官方幫助文件中的一幅圖,圖中通過餅圖和柱狀圖兩種形式展示了 CoreFX 中專門針對各個作業系統(Windows、Unix、 Linux和OX)的C#程式碼比例和程式碼行數,可以看到90%的 CoreFX 程式碼是與作業系統無關的,所以我們在使用 ASP.NET Core時受不同作業系統的影響也同樣會非常小。
在.NET Framework 時代,每釋出一個重大版本,需要經歷1年,2年,甚至3年。發版週期相對較長。
從《.NET Core發展歷程》圖中可以瞭解到自.NET Core 1.0於2016年6月26日正式釋出,至2019年12釋出.NET Core 3.1版本,基本上是每年釋出一個大的版本。.NET5已經於20201年11月正式釋出。微軟.NET團隊規劃未來每年第四季度釋出一個重大版本,其中奇數標記的為GA版本,偶數標記的為LTS版本。
參考文獻:
- https://devblogs.microsoft.com/dotnet/introducing-net-5/