1. 程式人生 > >《ASP.NET Core 高效能系列》關於.NET Core的部署方式

《ASP.NET Core 高效能系列》關於.NET Core的部署方式

概述,.NET Core應用程式可以建立三種類型的部署:FDD SCD FDE

  • 框架依賴的部署(FDD)。顧名思義,框架依賴的部署(FDD)依賴於目標系統上是否存在.NET Core版本。由於.NET Core已經存在,因此您的應用程式在不同的.NET Core版本中進行移植。您的應用程式僅包含其自己的程式碼以及.NET Core庫之外的任何第三方依賴項。FDD包含.dll檔案,可以通過使用dotnet命令列啟動這些檔案。

    例如,dotnet app.dll執行名為的應用程式app

  • 自包含的部署(SCD)。與FDD不同,自包含部署(SCD)不依賴於目標系統上共享元件的存在。所有元件,包括.NET Core庫和.NET Core執行時,都包含在應用程式中

  • 依賴框架的可執行檔案(FDE)。生成在目標平臺上執行的可執行檔案。與FDD相似,框架相關的可執行檔案(FDE)是特定於平臺的,並且不是自包含的。這些部署仍然依賴於存在共享的系統範圍的.NET Core版本來執行。可以通過呼叫已釋出的可執行檔案來執行您的應用程式,而無需dotnet直接呼叫該實用程式(和FDD的主要區別)

1.框架依賴的部署(FDD)

對於FDD,僅部署應用程式和第三方依賴項。應用將使用目標系統上存在的.NET Core版本,

這是針對.NET Core的.NET Core和ASP.NET Core應用程式的預設部署模型。

FDD的優點:

  • 不必預先定義你的應用程式的目標作業系統。

  • 部署包的很小。只會部署應用程式及其依賴項,而不部署.NET Core本身。

  • 除非被覆蓋,否則FDD將使用目標系統上安裝的最新的.NET Core執行時。這樣應用程式可以使用.NET Core執行時的最新修補版本。

  • 多個應用程式使用同一.NET Core安裝,從而減少了主機系統上的磁碟空間和記憶體使用。

FDD的缺點:

  • 僅當您的應用程式所面向的.NET Core 版本或更高版本已在主機系統上安裝時,您的應用程式才能執行。

  • .NET Core執行時和庫可能會在您不瞭解未來版本的情況下進行更改。在極少數情況下,這可能會改變您應用的行為。

2.自包含部署(SCD)

SCD的優點:

  • 可以完全控制與應用程式一起部署的.NET Core版本。

  • 不用擔心目標系統沒有安裝.NET Core

SCD的缺點:

  • 由於.NET Core包含在部署程式包中,因此您必須預先選擇要為其構建部署程式包的目標系統平臺。

  • 部署包相對較大,因為必須包括.NET Core以及應用程式及其第三方依賴項。

    從.NET Core 2.0開始,通過使用.NET Core 全球化不變模式,您可以將Linux系統上的部署大小減少約28 MB 。通常,Linux上的.NET Core依賴ICU庫提供全球化支援。在不變模式下,庫不包含在您的部署中,並且所有區域性的行為都與不變區域性類似。

  • 將大量獨立的.NET Core應用程式部署到系統上會佔用大量磁碟空間,因為每個應用程式都複製.NET Core檔案。

3.依賴框架的可執行檔案(FDE)

從.NET Core 2.2開始,可以將應用程式以及所有必需的第三方依賴項部署為FDE。應用將使用目標系統上安裝的.NET Core版本。

FDE的優點:

  • 部署包的大小很小。您只部署應用程式及其依賴項,而不部署.NET Core本身。

  • 多個應用程式使用同一.NET Core安裝,從而減少了主機系統上的磁碟空間和記憶體使用。

  • 可以通過呼叫已釋出的可執行檔案來執行您的應用程式,而無需dotnet直接呼叫該實用程式。

FDE的缺點:

  • 僅當您的應用程式所面向的.NET Core 版本或更高版本已在主機系統上安裝時,您的應用程式才能執行。

  • .NET Core執行時和庫可能會在您不瞭解未來版本的情況下進行更改。在極少數情況下,這可能會改變您應用的行為。

  • 您必須為每個目標平臺釋出您的應用程式。

釋出方式

 

以上 .NET Core RID 說明

 

Windows RID

僅列出了公共值。 若要獲取最新的完整版,請參閱 CoreFX 儲存庫上的 runtime.json 檔案。

  • 可移植(.NET Core 2.0 或更高版本)
    • win-x64
    • win-x86
    • win-arm
    • win-arm64
  • Windows 7 / Windows Server 2008 R2
    • win7-x64
    • win7-x86
  • Windows 8.1 / Windows Server 2012 R2
    • win81-x64
    • win81-x86
    • win81-arm
  • Windows 10 / Windows Server 2016
    • win10-x64
    • win10-x86
    • win10-arm
    • win10-arm64

 

 

Linux RID

僅列出了公共值。 若要獲取最新的完整版,請參閱 CoreFX 儲存庫上的 runtime.json 檔案。 執行以下未列出的發行版的裝置可能適用於其中一個可移植 RID。 例如,可以將執行未列出的 Linux 發行版的 Raspberry Pi 裝置定向為使用 linux-arm

  • 可移植(.NET Core 2.0 或更高版本)
    • linux-x64(大多數桌面發行版,如 CentOS、Debian、Fedora、Ubuntu 及派生版本)
    • linux-musl-x64(使用 musl 的輕量級發行版,如 Alpine Linux)
    • linux-arm(在 ARM 上執行的 Linux 分發版,如 Raspberry Pi)
  • Red Hat Enterprise Linux
    • rhel-x64(被 linux-x64 取代,適用於 RHEL 6 以上版本)
    • rhel.6-x64(.NET Core 2.0 或更高版本)
  • Tizen(.NET Core 2.0 或更高版本)
    • tizen
    • tizen.4.0.0
    • tizen.5.0.0

有關詳細資訊,請參閱 .NET Core 依賴項和要求。

macOS RID

macOS RID 使用較早的“OSX”品牌。 僅列出了公共值。 若要獲取最新的完整版,請參閱 CoreFX 儲存庫上的 runtime.json 檔案。

  • 可移植(.NET Core 2.0 或更高版本)
    • osx-x64(最低 OS 版本為 macOS 10.12 Sierra)
  • macOS 10.10 Yosemite
    • osx.10.10-x64
  • macOS 10.11 El Capitan
    • osx.10.11-x64
  • macOS 10.12 Sierra(.NET Core 1.1 或更高版本)
    • osx.10.12-x64
  • macOS 10.13 High Sierra(.NET Core 1.1 或更高版本)
    • osx.10.13-x64
  • macOS 10.14 Mojave(.NET Core 1.1 或更高版本)
    • osx.10.14-x64