.NET 應用程式發行總覽

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

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

將您的應用程式發佈為與 framework 相依 的專案,會產生只包含應用程式本身及其相依性的應用程式。 應用程式的使用者必須分別安裝 .NET 執行時間。

這兩種發行模式預設都會產生平臺特定的可執行檔。 您可以建立不含可執行檔的 Framework 相依應用程式,而這些應用程式會跨平臺。

當產生可執行檔時,您可以使用執行時間識別碼 (RID) 來指定目標平臺。 如需有關 Rid 的詳細資訊,請參閱 .NET RID 目錄

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

類型 SDK 2.1 SDK 3。1 SDK 5。0 SDK 6。0 Command
適用于目前平臺的framework 相依可執行檔 ✔️ ✔️ ✔️ dotnet publish
特定平臺的framework 相依可執行檔 ✔️ ✔️ ✔️ dotnet publish -r <RID> --self-contained false
framework 相依的跨平臺二進位檔。 ✔️ ✔️ ✔️ ✔️ dotnet publish
獨立可執行檔 ✔️ ✔️ ✔️ ✔️ dotnet publish -r <RID>

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

產生可執行檔

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

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

類型 SDK 2.1 SDK 3。1 SDK 5。0 SDK 6。0 Command
適用于目前平臺的framework 相依可執行檔 ✔️ ✔️ ✔️ dotnet publish
特定平臺的framework 相依可執行檔 ✔️ ✔️ ✔️ dotnet publish -r <RID> --self-contained false
獨立可執行檔 ✔️ ✔️ ✔️ ✔️ dotnet publish -r <RID>

產生跨平臺二進位檔

當您將應用程式發佈為與 framework 相依的應用程式時,會建立跨平臺二進位檔(以 dll 檔案的形式)。 Dll檔案會以您的專案命名。 例如,如果您有一個名為 word_reader的應用程式,則會建立名為 word_reader.dll 的檔案。 以這種方式發佈的應用程式會使用 dotnet <filename.dll> 命令執行,而且可以在任何平臺上執行。

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

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

類型 SDK 2.1 SDK 3。x SDK 5。0 SDK 6。0 Command
framework 相依的跨平臺二進位檔。 ✔️ ✔️ ✔️ ✔️ dotnet publish

發佈 framework 相依

發佈為與 framework 相依的應用程式是跨平臺,不包含 .NET 執行時間。 您應用程式的使用者必須安裝 .NET 執行時間。

將應用程式發佈為與 framework 相依的應用程式,會產生 跨平臺二進位 檔做為 dll 檔案,以及以您目前平臺為目標的 平臺特定可執行 檔。 Dll是跨平臺,而可執行檔則不是。 例如,如果您發行名為word_reader和目標 Windows 的應用程式,則會隨著word_reader.dll建立word_reader.exe可執行檔。 以 Linux 或 macOS 為目標時,會建立 word_reader 可執行檔以及 word_reader.dll。 如需有關 Rid 的詳細資訊,請參閱 .NET RID 目錄

重要

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

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

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

優點

  • 小規模部署
    只會發佈您的應用程式及其相依性。 使用者會安裝 .NET 執行時間和程式庫,而且所有應用程式會共用執行時間。

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

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

缺點

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

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

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

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

範例

發佈跨平臺架構相依的應用程式。 以目前平臺為目標的可執行檔會與 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 檔案。 使用命令的 -r <RID> 參數 dotnet publish 指定目標平臺和架構。 如需有關 Rid 的詳細資訊,請參閱 .NET RID 目錄

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

優點

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

  • 平臺特定目標
    因為您必須為每個平臺發佈您的應用程式,所以您知道應用程式將執行的位置。 如果 .NET 引進新的平臺,使用者將無法在該平臺上執行您的應用程式,直到您發行以該平臺為目標的版本。 您可以在使用者于新的平臺上執行應用程式之前,先測試應用程式的相容性問題。

缺點

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

    提示

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

    提示

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

  • 難以更新 .NET 版本
    .NET 執行時間 (隨應用程式散發) 只能透過發行新版的應用程式來進行升級。 但是,當您的應用程式在電腦上執行時,.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

另請參閱