.NET平臺系列23:.NET Core/.NET5/.NET6 和 .NET Framework 的選擇建議

張傳寧發表於2021-06-12

有兩種支援的 .NET 實現可用於生成伺服器端應用:

  • .NET Framework
  • .NET Core/5+,包括 .NET Core、.NET 5 及更高版本。

這兩者共用許多相同的元件,你可在它們之間共享程式碼。 但兩者之間存在根本的差異,可根據需要實現的目標進行選擇。 本文介紹了在何種情況下進行選擇。

在以下情況,對伺服器應用程式使用 .NET Core/5+:

  • 使用者有跨平臺需求。
  • 你正在以微服務為目標。
  • 你正在使用 Docker 容器。
  • 需要高效能和可擴充套件的系統。
  • 需按應用程式提供並行的 .NET 版本。

在以下情況,對伺服器應用程式使用 .NET Framework :

  • 應用當前使用 .NET Framework(建議擴充套件而不是遷移)。
  • 應用使用不可用於 .NET Core/5+ 的第三方 .NET 庫或 NuGet 包。
  • 應用使用不可用於 .NET Core/5+ 的 .NET Framework 技術。
  • 應用使用不支援 .NET Core/5+ 的平臺。
選擇 .NET Core/5+ 的情形
以下各部分更詳細地說明了前面提到的選擇 .NET Core/5+ 的原因。
  • 跨平臺需求

  如果應用程式(Web/服務)需要在多個平臺(Windows、Linux 和 macOS)上執行,請使用 .NET Core/.NET5+。

  .NET Core/.NET5+ 作為開發工作站支援前面提到的作業系統。 Visual Studio 提供了適用於 Windows 和 macOS 的整合開發環境 (IDE)。 還可使用執行於 macOS、Linux 和 Windows 上的 Visual Studio Code。 Visual Studio Code 支援 .NET Core/5+,包括 IntelliSense 和除錯。 大多數第三方編輯器(如 Sublime、Emacs 和 VI)都可搭配 .NET Core/5+ 使用。 這些第三方編輯器可使用 Omnisharp 獲取編輯器 IntelliSense。 也可不使用任何程式碼編輯器,直接使用適用於所有支援平臺的 .NET CLI

  • 微服務體系結構

  微服務體系結構允許跨服務邊界組合使用技術。 通過這種技術組合,可逐步接受 .NET Core/.NET5+ 作為能與其他微服務或服務搭配使用的新微服務。 例如,可組合使用微服務或使用 .NET Framework、Java、Ruby 或其他單片技術開發的服務。

  可用的基礎結構平臺有很多。 Azure Service Fabric,設計用於大型和複雜微服務系統 。 Azure App Service,很適合用於無狀態微服務。 基於 Docker 的微服務備選方案適合任何一種微服務方法,這部分內容將在容器部分進行說明。 所有這些平臺都支援 .NET Core/5+,是託管微服務的理想選擇。

  有關微服務體系結構的詳細資訊,請參閱 .NET 微服務 - 適用於容器化 .NET 應用程式的體系結構

  • 容器

  容器通常與微服務體系結構結合使用。 還可使用容器將遵循任何體系結構模式的 Web 應用或服務容器化。 可在 Windows 容器上使用 .NET Framework,但 .NET Core/.NET5+ 的模組化和輕型性質使之成為更適合容器的選擇。 在建立和部署容器時,使用 .NET Core/5+ 時容器的映像大小要遠小於使用 .NET Framework 時的大小。 例如,因為它是跨平臺的,所以可將伺服器應用部署到 Linux Docker 容器。

  Docker 容器可託管在自己的 Linux 或 Windows 基礎結構中,或託管在 Azure Kubernetes 服務等雲服務中。 Azure Kubernetes 服務可管理、協調和縮放雲中基於容器的應用程式。

  • 高效能和可擴充套件的系統

  如果系統需要最佳的效能和可伸縮性,.NET Core/.NET5+ 和 ASP.NET Core 是最佳的選擇。 Windows Server 和 Linux 的高效能伺服器執行時使 ASP.NET Core 成為 TechEmpower 基準上效能最佳的 Web 框架。

  效能和可伸縮性對微服務體系結構尤為重要,體系結構中可能正在執行數百個微服務。 藉助 ASP.NET Core,系統執行的伺服器/虛擬機器 (VM) 數要低得多。 減少伺服器/VM 後可節省基礎結構和託管成本。

  • 按應用程式級別並行安裝 .NET 版本

  若要安裝含不同 .NET 版本上的依賴項的應用程式,建議使用 NET Core/.NET5+。 .NET 對該實現支援在同一計算機上並行安裝不同版本的 .NET 執行時。 並行安裝允許在同一伺服器上使用多項服務,每項服務位於其相應的 .NET Core/.NET5+ 版本上。 這還可在應用程式升級和 IT 運營時降低風險、節省成本。

  .NET Framework 不支援並行安裝。 它是一個 Windows 元件,一次只能有一個版本存在於計算機上。 .NET Framework 的每個版本均替換之前的版本。 如果安裝面向 .NET Framework 更高版本的新應用,則可能會中斷計算機上執行的現有應用,因為替換了之前的版本。

選擇 .NET Framework 的情形
  .NET Core/.NET5+ 對新應用程式和應用程式模式特別有用。 但在很多現有方案中依然會自然而然地選擇 .NET Framework,並且對於所有伺服器應用程式來說.NET Framework 不會被 .NET Core/.NET5+ 代替。
  • 現有的 .NET Framework 應用程式

  在大多數情況下,不需要將現有應用程式遷移到 .NET Core/.NET5+。 相反,若要擴充套件現有的應用程式(例如,在 ASP.NET Core 中寫入新的 Web 服務),建議使用 .NET Core/.NET5+。

  • 不可用於 .NET Core/.NET5+ 的第三方庫或 NuGet 包

  通過 .NET Standard 可跨各種 .NET 實現(包括 .NET Core/5+)共享程式碼。 使用 .NET Standard 2.0,相容性模式允許 .NET Standard 和 .NET Core/.NET5+ 專案引用 .NET Framework 庫。 有關詳細資訊,請參閱對 .NET Framework 庫的支援

  僅當庫或 NuGet 包使用 .NET Standard 或 .NET Core/.NET5+ 中不提供的技術時,才需要使用 .NET Framework。

  • .NET Framework 技術不可用於 .NET Core/.NET5+

  某些 .NET Framework 技術在 .NET Core/.NET5+ 中不可用。 以下列表顯示無法在 .NET Core/.NET5+ 中找到的最常見技術:

  • ASP.NET Web 窗體應用程式:ASP.NET Web 窗體僅在.NET Framework 中可用。 ASP.NET Core 不能用於 ASP.NET Web 窗體。

  • ASP.NET 網頁應用程式:ASP.NET 網頁未包含在 ASP.NET Core 中。

  • WCF 服務的實現。 雖然 WCF 客戶端庫可從 .NET Core/.NET5+ 使用 WCF 服務,但 WCF 伺服器實現目前只在 .NET Framework 上可用。

  • 工作流相關的服務:Windows Workflow Foundation (WF)、工作流服務(WCF + 單個服務中的 WF)和 WCF Data Services(以前稱為“ADO.NET Data Services”)僅在 .NET Framework 上可用。

  • 語言支援:.NET Core/.NET5+ 目前支援 Visual Basic 和 F#,但不是所有專案型別都支援。 有關支援的專案模板列表,請參閱 dotnet new 的模板選項

有關詳細資訊,請參閱在 .NET 5 中不可用的 .NET Framework 技術

  • 平臺不支援.NET Core/.NET5+

  某些 Microsoft 或第三方平臺不支援 .NET Core/.NET5+。 某些 Azure 服務提供尚不可用於 .NET Core/.NET5+ 的 SDK。 在這種情況下,可使用等效的 REST API(而不是客戶端 SDK)。

 


參考文獻:

 

相關文章