本文首發於【碼友網】–《什麼是.NET?什麼是.NET Core?.NET和.NET Core區別又是什麼呢?》概述對於.NET平臺的初學者來說,有時候比較困惑“什麼是.NET?什麼是.NET Core?.NET和.NET Core區別又是什麼呢?”。確實,目前微軟的開發平臺有兩種不同的.NET運行時環境,一種是.NET Framework,另一種則是.NET Core(.NET 5),不同的目標框架運行時環境不同。那這兩者的區別到底是什麼,在開發時如何選擇不同的.NET框架呢?本文將為.NET開發者逐一講解。在談及.NET與.NET Core的區別之前,我們得先聊聊.NET的歷史,瞭解一下為什麼會有.NET Core?.NET Framework簡介在.NET Core出現之前,微軟的應用開發主要運行載體是自傢的操作系統,即Windows操作系統。2002年時,微軟發佈瞭.NET框架的早期版本,當前隻有一個框架,即.NET Framework。不久之後,微軟又發佈瞭.NET 精簡版框架(.NET Compact Framework),這是.NET框架的一個子集,適用於更小的設備,特別是Windows移動設備(Windows Mobile)。這個精簡版的框架是一個獨立於.NET框架的代碼庫。它包括瞭整個運行時的垂直結構:運行時、框架和頂部的應用程序模型。.NET Framework是微軟為開發應用程序而創建的主要運行在Windows操作系統的軟件框架。它包含瞭大量的FCL(Framework Class Library)框架類庫並且提供瞭多種語言之間的跨語言互操作。.NET Framework平臺的應用程序在公共語言運行時(CLR)中執行,CLR是一個應用程序的虛擬機,它提供安全、內存管理和異常處理等服務。因此,使用.NET Framework編寫的計算機代碼稱為“托管代碼”。框架類庫(FCL)和公共語言運行時(CLR)一起構成瞭.NET Framework。.NET跨平臺–.NET Core早期(.NET Core之前)的.NET應用程序是不跨平臺(操作系統的),它隻能運行在Windows操作系統上,並且操作系統中還必須安裝.NET Framework環境。如果要運行在其他操作系統上,需要借助第三方的框架,比如: Mono—一個開源的第三方.NET Framework框架,它可以運行在Linux和Mac OS操作系統上。2011年5月,Mono開發者為瞭使用C#開發跨平臺的移動設備應用,成立並發佈瞭Xamarin後於2016年被微軟收購,但這隻是微軟跨平臺的第一步,畢竟Xamarin隻適合開發移動端應用。隨意移動設備迅速占領市場,Windows平臺的大勢已去。直到.NET Core,.NET才算真正的跨平臺,這也是微軟重大的戰略轉變。2014年12月,微軟擁抱開源社區,宣佈開源瞭.NET Core的核心代碼,也是.NET跨平臺邁出的最重要的一步。經過不斷地迭代,2016年6月發佈和.NET Core 1.0,2017年3月發佈.NET Core1.1.1。.NET Core是一種模塊化實現,可用於各種垂直領域,從數據中心擴展到基於觸摸的設備,它是開源的,跨平臺的,能在Windows、LinuxMac OSX等操作系統上運行,同時還支持Docker等容器化環境安裝和部署。.NET 5微軟為瞭統一.NET平臺,計劃將所有的.NET運行時統一為一個.NET平臺,並為所有應用程序模型(如:.NET Core, Windows Forms, WPF, UWP, Xamarin, Blazor)提供統一的基類庫(BCL)。在2019年5月6日宣佈瞭.NET 5將是.NET Core 3.0的下一個主要版本。2020年3月,微軟發佈瞭.NET 5的第一個預覽版,並在同年的11月10日發佈瞭.NET 5的第一個正式版。.NET生態以下是一張如今.NET平臺的生態示意圖:從上面的圖表中可以看出,.NET生態系統有三個主要的高級組件——.NET Framework、.NET Core和Xamarin組成。.NET Framework:支持Windows和Web應用程序。現在,你仍然可以使.NET Framework作為目標框架來構建運行於Windows操作系統的Winform、WPF和UWP等桌面應用程序,以及基於ASP.NET MVC的Web應用程序。.NET Core:是一個新的、開源的、跨平臺框架,它用於構建適用於跨操作系統的應用程序,包括Windows、Mac和Linux。結合C#,它的應用場景也相當廣泛,比如:用一套代碼開發基於Xamarin的支持多端(Windows,Android,iOS)的應用程序;可以開發基於Blazor的桌面應用;跨平臺的網站應用,Web API應用,微服務;跨平臺的遊戲開發Unity,目前應用得非常廣泛,像【王者榮耀】這類大型的手遊都是使用Unity開發出來的;基於WPF的桌面應用程序,使用WPF你可以自定義完成超酷的用戶交互界面;物聯網人工智能機器學習結論俗語說:“長江後浪推前浪。”,技術領域也是如此。隨著開發技術的不斷發展和進步,新技術終將代替老技術。如果你是一位.NET的初學者,並者沒有歷史項目(基於.NET Framework框架的項目)的包袱,建議你可以直接從.NET Core(.NET 5)入手學習,因為它具備現代開發技術的絕大多數優點:開源,跨平臺,支持容器化部署等。