有兩種支援的 .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+ 的平臺。
- 跨平臺需求
如果應用程式(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+。 相反,若要擴充套件現有的應用程式(例如,在 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)。
參考文獻:
- https://docs.microsoft.com/en-us/dotnet/standard/choosing-core-framework-server
- 在 ASP.NET 和 ASP.NET Core 之間進行選擇
- 面向 .NET Framework 的 ASP.NET Core
- 目標框架
- .NET 簡介
- 從 .NET Framework 移植到 .NET 5
- .NET 和 Docker 簡介
- .NET 元件概述
- .NET 微服務 - 適用於容器化 .NET 應用程式的體系結構