.NET 應用程式發佈概觀

您可以使用 .NET 建立的應用程式以兩種不同的模式發佈,而模式會影響使用者執行應用程式的方式。

將應用程式發佈為 獨立 式會產生包含 .NET 執行時間和程式庫的應用程式,以及您的應用程式及其相依性。 應用程式的使用者可以在未安裝.NET 執行階段的電腦上執行該應用程式。

以架構相依的方式發佈應用程式,會產生只包含應用程式本身及其相依性的應用程式。 應用程式的使用者必須個別安裝 .NET 執行時間。

這兩種發佈模式預設會產生平台特定的可執行檔。 您可以建立架構相依的應用程式,而不需要可執行檔,而且這些是跨平台的應用程式。

產生可執行檔時,您可以使用執行階段識別碼 (RID) 指定目標平台。 如需 RID 的詳細資訊,請參閱 .NET RID 目錄

下表概述每個 SDK 版本用來將應用程式發佈為架構相依或獨立式的命令:

類型 SDK 2.1 SDK 3.1 SDK 5.0 SDK 6.0 Command
目前平台的架構相依可執行檔 ✔️ ✔️ ✔️ dotnet publish
特定平台的架構相依可執行檔 ✔️ ✔️ ✔️ dotnet publish -r <RID> --self-contained false
架構相依的跨平台二進位檔 ✔️ ✔️ ✔️ ✔️ dotnet publish
獨立可執行檔 ✔️ ✔️ ✔️ ✔️ dotnet publish -r <RID>

如需詳細資訊,請參閱 .NET dotnet publish 命令

產生可執行檔

可執行檔不是跨平臺。 它們專屬於作業系統和 CPU 架構。 發佈應用程式並建立可執行檔時,您可以透過獨立架構相依的形式發佈應用程式。 將應用程式發佈為獨立式應用程式包含 .NET 執行時間與應用程式,而應用程式的使用者不需要擔心在執行應用程式之前先安裝 .NET。 發佈為架構相依的應用程式不包含 .NET 執行時間和程式庫;僅包含應用程式和協力廠商相依性。

下列命令會產生可執行檔:

類型 SDK 2.1 SDK 3.1 SDK 5.0 SDK 6.0 Command
目前平台的架構相依可執行檔 ✔️ ✔️ ✔️ dotnet publish
特定平台的架構相依可執行檔 ✔️ ✔️ ✔️ dotnet publish -r <RID> --self-contained false
獨立可執行檔 ✔️ ✔️ ✔️ ✔️ dotnet publish -r <RID>

產生跨平台二進位檔

當您以 dll 檔案的形式,透過架構相依的形式發佈應用程式時,就會建立跨平台二進位檔。 dll 檔案會以您的專案命名。 例如,如果您有名為 word_reader 的應用程式,則會建立名為 word_reader.dll 的檔案。 以這種方式發佈的應用程式的執行是使用 dotnet <filename.dll> 命令進行,而且可以在任何平台上執行。

只要已安裝目標 .NET 執行時間,就可以在任何作業系統上執行跨平臺二進位檔。 如果未安裝目標 .NET 執行時間,如果應用程式設定為向前復原,應用程式可能會使用較新的執行時間執行。 如需詳細資訊,請參閱向前復原架構相依的應用程式

下列命令會產生跨平台二進位檔:

類型 SDK 2.1 SDK 3.x SDK 5.0 SDK 6.0 Command
架構相依的跨平台二進位檔 ✔️ ✔️ ✔️ ✔️ dotnet publish

發佈架構相依

發佈為架構相依的應用程式是跨平臺,且不包含 .NET 執行時間。 需要您應用程式的使用者才能安裝 .NET 執行時間。

以架構相依的形式發佈應用程式,會產生 dll 檔案形式的跨平台二進位檔,以及以您目前平台為目標的平台特定可執行檔。 dll 是跨平台的,但可執行檔不是。 例如,如果您發佈名為 word_reader 的應用程式和目標 Windows,則會建立 word_reader.exe 可執行檔以及 word_reader.dll。 以 Linux 或 macOS 為目標時,會建立 word_reader 可執行檔以及 word_reader.dll。 如需 RID 的詳細資訊,請參閱 .NET RID 目錄

重要

當您發佈應用程式架構相依時,.NET SDK 2.1 不會產生平臺特定的可執行檔。

應用程式的跨平台二進位檔可以使用 dotnet <filename.dll> 命令執行,而且可以在任何平台上執行。 如果應用程式使用具有平臺特定實作的 NuGet 套件,則所有平臺的相依性都會連同應用程式一起複製到發佈資料夾。

您可以將參數傳遞 -r <RID> --self-contained false 至 命令,以建立特定平臺的 dotnet publish 可執行檔。 -r省略 參數時,會為目前的平臺建立可執行檔。 任何具有目標平臺特定相依性的 NuGet 套件,會複製到 publish 資料夾。 如果您不需要平臺特定的可執行檔,您可以在專案檔中指定 <UseAppHost>False</UseAppHost> 。 如需詳細資訊,請參閱 .NET SDK 專案的 MSBuild 參考

優點

  • 小型部署
    只散發應用程式及其相依性。 .NET 執行時間和程式庫是由使用者安裝,且所有應用程式都會共用執行時間。

  • 跨平台
    您的應用程式和任何 。以 NET 為基礎的程式庫在其他作業系統上執行。 您不需要為應用程式定義目標平台。 如需 .NET 檔案格式的相關資訊,請參閱 .NET 元件檔案格式

  • 使用最新的修補執行階段
    應用程式會在目標系統上安裝的目標主要次要 .NET) 系列內,使用最新的執行時間 (。 這表示您的應用程式會自動使用最新修補版本的 .NET 執行時間。 此預設行為可以覆寫。 如需詳細資訊,請參閱向前復原架構相依的應用程式

缺點

  • 需要預先安裝執行階段
    只有當應用程式目標所在的 .NET 版本已安裝在主機系統上時,您的應用程式才能執行。 您可以將應用程式的向前復原行為設定為需要特定版本的 .NET,或允許較新版本的 .NET。 如需詳細資訊,請參閱向前復原架構相依的應用程式

  • .NET 可能會變更
    .NET 執行時間和程式庫可以在執行應用程式的電腦上更新。 在罕見的情況下,如果您使用大部分應用程式執行的 .NET 程式庫,這可能會變更應用程式的行為。 您可以設定應用程式如何使用較新版本的 .NET。 如需詳細資訊,請參閱向前復原架構相依的應用程式

下列缺點僅適用于 .NET Core 2.1 SDK。

  • dotnet使用 命令啟動應用程式
    使用者必須執行 dotnet <filename.dll> 命令來啟動您的應用程式。 .NET Core 2.1 SDK 不會針對已發佈的架構相依應用程式產生平臺特定的可執行檔。

範例

發佈應用程式跨平臺架構相依。 以您目前平台為目標的可執行檔會與 dll 檔案同時建立。

dotnet publish

發佈應用程式跨平臺架構相依。 Linux 64 位元可執行檔會與 dll 檔案同時建立。 此命令不適用於 .NET Core SDK 2.1。

dotnet publish -r linux-x64 --self-contained false

發佈獨立

以獨立的形式發佈的應用程式會產生平台特定的可執行檔。 輸出發佈資料夾包含應用程式的所有元件,包括 .NET 程式庫和目標執行時間。 應用程式與其他 .NET 應用程式隔離,而且不會使用本機安裝的共用執行時間。 您應用程式的使用者不需要下載並安裝 .NET。

為指定的目標平台產生可執行檔二進位檔。 例如,如果您有名為 word_reader 的應用程式,而且您發佈 Windows 的獨立可執行檔,則會建立 word_reader.exe 檔案。 在 Linux 或 macOS 發佈時,會建立 word_reader 檔案。 目標平台和結構的指定是使用 dotnet publish 命令的 -r <RID> 參數來進行。 如需 RID 的詳細資訊,請參閱 .NET RID 目錄

如果應用程式具有平台特定的相依性,例如包含平台特定相依性的 NuGet 套件,系統會將這些相依性連同應用程式一起複製到發佈資料夾。

優點

  • 控制 .NET 版本
    您可以控制使用您的應用程式部署的 .NET 版本。

  • 平台特定目標
    您必須針對每個平台發佈應用程式,因此您知道應用程式的執行位置。 如果 .NET 引進新的平臺,使用者必須先發行以該平臺為目標的版本,才能在該平臺上執行您的應用程式。 您可以在使用者於新平台上執行應用程式之前,先測試應用程式是否有相容性問題。

缺點

  • 較大的部署
    因為您的應用程式包含 .NET 執行時間和所有應用程式相依性,所以所需的下載大小和硬碟空間大於 架構相依 版本。

    提示

    您可以使用 .NET 全球化不因模式而減少在 Linux 系統上部署的大小約 28 MB。 這會強制應用程式將所有文化特性 (Culture) 視為不因文化特性而異

    提示

    IL 修剪可以進一步減少部署大小。

  • 較難更新 .NET 版本
    .NET Runtime (隨您的應用程式一起散發,) 只能藉由發行新版本的應用程式來升級。 不過,.NET 會視需要更新應用程式執行的電腦架構程式庫的重要安全性修補程式。 您必須負責此安全性修補程式案例的端對端驗證。

範例

發佈獨立應用程式。 系統會建立 macOS 64 位元可執行檔。

dotnet publish -r osx-x64

發佈獨立應用程式。 系統會建立 Windows 64 位元可執行檔。

dotnet publish -r win-x64

使用 ReadyToRun 映像發佈

使用 ReadyToRun 映射發佈可改善應用程式的啟動時間,代價是增加應用程式的大小。 若要使用 ReadyToRun 發佈,請參閱 ReadyToRun 以取得詳細資料。

優點

  • 改善的啟動時間
    應用程式執行 JIT 所需的時間會減少。

缺點

  • 較大的大小
    應用程式將會在磁碟上變大。

範例

發佈獨立和 ReadyToRun 應用程式。 系統會建立 macOS 64 位元可執行檔。

dotnet publish -c Release -r osx-x64 -p:PublishReadyToRun=true

發佈獨立和 ReadyToRun 應用程式。 系統會建立 Windows 64 位元可執行檔。

dotnet publish -c Release -r win-x64 -p:PublishReadyToRun=true

另請參閱