.Net vs .Net Core,我改如何選擇?看這一篇文章就夠了
- 2020 年 3 月 10 日
- 筆記
前言
.Net目前支援構建伺服器端應用程式的兩種實現主要有兩種,.NET Framework和.NET Core。兩者共享許多相同的組件,並且您可以在兩者之間共享程式碼。但是,兩者之間存在根本差異,在我們選擇使用哪種框架構建應用時,您的選擇取決於您要完成的工作,以下說明兩種框架的應用場景,希望能夠幫助您做出最正確的選擇。
在以下情況下,將.NET Core用於伺服器應用程式:
- 您有跨平台的需求。
- 您正在針對微服務。
- 您正在使用Docker容器。
- 您需要高性能和可擴展的系統。
- 每個應用程式需要並行的.NET版本。
- 在以下情況下,將.NET Framework用於伺服器應用程式:
您的應用當前使用.NET Framework(建議擴展而不是遷移)。
- 您的應用程式使用了.NET Core不可用的第三方.NET庫或NuGet軟體包。
- 您的應用使用了.NET Core無法使用的.NET技術。
- 您的應用使用的平台不支援.NET Core。 Windows,macOS和Linux支援.NET Core。
何時選擇.NET Core
以下各節對前面所述選擇.NET Core的原因進行了更詳細的說明。
跨平台需求
如果您的應用程式(Web /服務)需要在多個平台(Windows,Linux和macOS)上運行,請使用.NET Core。
.NET Core支援將前面提到的作業系統作為您的開發工作站。 Visual Studio為Windows和macOS提供了集成開發環境(IDE)。您還可以使用Visual Studio Code,該程式碼可在macOS,Linux和Windows上運行。 Visual Studio Code支援.NET Core,包括IntelliSense和調試。大多數第三方編輯器(例如Sublime,Emacs和VI)都可以使用.NET Core。這些第三方編輯器使用Omnisharp獲得編輯器IntelliSense。您也可以避免使用任何程式碼編輯器,而直接使用適用於所有受支援平台的.NET Core CLI。
微服務架構
微服務架構允許跨服務邊界混合使用多種技術。這種技術組合使.NET Core可以逐漸與可與其他微服務或服務一起使用的新微服務兼容。例如,您可以混合使用.NET Framework,Java,Ruby或其他單片技術開發的微服務或服務。
有許多可用的基礎架構平台。 Azure Service Fabric專為大型和複雜的微服務系統而設計。 Azure應用服務是無狀態微服務的理想選擇。如“容器”部分所述,基於Docker的微服務替代品適合任何類型的微服務方法。所有這些平台都支援.NET Core,使其成為託管微服務的理想選擇。
有關微服務體系結構的更多資訊,請參見.NET微服務。容器化.NET應用程式的體系結構。
容器
容器通常與微服務架構結合使用。容器還可以用於容器化遵循任何體系結構模式的Web應用程式或服務。 .NET Framework可以在Windows容器上使用,但是.NET Core的模組化和輕量級的特性使其成為容器的更好選擇。創建和部署容器時,.NET Core的映像大小比.NET Framework小得多。因為它是跨平台的,所以您可以將伺服器應用程式部署到Linux Docker容器。
Docker容器可以託管在您自己的Linux或Windows基礎結構中,也可以託管在諸如Azure Kubernetes Service之類的雲服務中。 Azure Kubernetes Service可以在雲中管理,協調和擴展基於容器的應用程式。
對高性能和可擴展系統的需求
當您的系統需要最佳的性能和可伸縮性時,.NET Core和ASP.NET Core是您的最佳選擇。 Windows Server和Linux的高性能伺服器運行時使.NET成為TechEmpower基準測試中性能最高的Web框架。
性能和可伸縮性與可能正在運行數百個微服務的微服務體系結構特別相關。使用ASP.NET Core,系統運行的伺服器/虛擬機(VM)數量少得多。減少的伺服器/虛擬機節省了基礎架構和託管成本。
每個應用程式級別並排的.NET版本的需求
要安裝依賴於不同版本.NET的應用程式,建議使用.NET Core。 .NET Core可在同一台電腦上並行安裝不同版本的.NET Core運行時。這種並行安裝允許在同一伺服器上提供多個服務,每個服務都在其自己的.NET Core版本上。它還降低了風險,並節省了應用程式升級和IT運營的費用。
何時選擇.NET Framework
.NET Core為新的應用程式和應用程式模式提供了明顯的好處。但是,對於許多現有方案而言,.NET Framework仍然是自然的選擇,因此對於所有伺服器應用程式,.NET Core都不會取代.NET Framework。
當前.NET Framework應用程式
在大多數情況下,您不需要將現有應用程式遷移到.NET Core。相反,建議的方法是在擴展現有應用程式時使用.NET Core,例如在ASP.NET Core中編寫新的Web服務。
需要使用不適用於.NET Core的第三方.NET庫或NuGet軟體包
圖書館正在迅速擁抱.NET標準。 .NET Standard支援跨所有.NET實現(包括.NET Core)共享程式碼。使用.NET Standard 2.0,這甚至更加容易:
API的表面變得更大。
引入了.NET Framework兼容模式。此兼容模式允許.NET Standard / .NET Core項目引用.NET Framework庫。要了解有關兼容模式的更多資訊,請參見宣布.NET Standard 2.0。
因此,僅在庫或NuGet軟體包使用.NET Standard / .NET Core中不可用的技術的情況下,才需要使用.NET Framework。
需要使用.NET Core不可用的.NET技術
.NET Core中不提供某些.NET Framework技術。其中一些可能在更高的.NET Core版本中可用。其他則不適用於.NET Core定位的新應用程式模式,並且可能永遠不可用。以下列表顯示了.NET Core中找不到的最常見技術:
ASP.NET Web窗體應用程式:
ASP.NET Web窗體僅在.NET Framework中可用。 ASP.NET Core不能用於ASP.NET Web窗體。沒有計劃將ASP.NET Web窗體引入.NET Core。
ASP.NET Web Pages應用程式:
ASP.NET Core中不包含ASP.NET Web Pages。
WCF服務實施。
即使有WCF-Client庫可以使用.NET Core中的WCF服務,WCF伺服器實現當前也僅在.NET Framework中可用。該方案不是當前.NET Core計劃的一部分,但正在考慮將來使用。
與工作流相關的服務:
Windows Workflow Foundation(WF),工作流服務(單個服務中的WCF + WF)和WCF數據服務(以前稱為「 ADO.NET數據服務」)僅在.NET Framework中可用。沒有計劃將WF / WCF + WF / WCF數據服務引入.NET Core。
需要使用不支援.NET Core的平台
某些Microsoft或第三方平台不支援.NET Core。某些Azure服務提供了尚無法在.NET Core上使用的SDK。這是一個過渡情況,因為所有Azure服務都使用.NET Core。同時,您始終可以使用等效的REST API代替客戶端SDK。
結語
以上總結了.Net與.Net Framework之間的差異和每項的最佳使用場景,希望能夠為剛上手.Net的朋友們答疑解惑。接下來我會陸續製作.Net與.Net Core相關基礎教程,並分享到個人部落格,希望大家能夠關注支援,原創,喜歡的話記得幫忙點個贊。
本文由部落格群發一文多發等運營工具平台 OpenWrite 發布