dotnet publish

本文適用于: ✔️.NET Core 3.1 SDK 和更新版本

名稱

dotnet publish - 將應用程式和其相依性發佈至資料夾,以部署至主控系統。

概要

dotnet publish [<PROJECT>|<SOLUTION>] [-a|--arch <ARCHITECTURE>]
    [-c|--configuration <CONFIGURATION>]
    [-f|--framework <FRAMEWORK>] [--force] [--interactive]
    [--manifest <PATH_TO_MANIFEST_FILE>] [--no-build] [--no-dependencies]
    [--no-restore] [--nologo] [-o|--output <OUTPUT_DIRECTORY>]
    [--os <OS>] [-r|--runtime <RUNTIME_IDENTIFIER>]
    [--sc|--self-contained [true|false]] [--no-self-contained]
    [-s|--source <SOURCE>] [--use-current-runtime, --ucr [true|false]]
    [-v|--verbosity <LEVEL>] [--version-suffix <VERSION_SUFFIX>]

dotnet publish -h|--help

描述

dotnet publish 會編譯應用程式,讀取在其專案檔中指定的相依性,然後將產生的一組檔案發行到目錄中。 此輸出包含下列資產:

  • 組件中的中繼語言 (IL) 程式碼,副檔名為 dll
  • .deps.json檔案,其中包含專案的所有相依性。
  • .runtimeconfig.json檔案,指定應用程式預期的共用執行時間,以及執行時間的其他組態選項 (,例如垃圾收集類型) 。
  • 應用程式的相依性,這些相依性會從 NuGet 快取複製到輸出資料夾。

dotnet publish 命令的輸出已準備好部署到裝載系統 (例如伺服器、電腦、Mac、膝上型電腦) 以供執行。 這是準備應用程式以供部署的唯一正式支援的方法。 根據專案所指定的部署類型,主控系統可能或可能不會安裝 .NET 共用執行時間。 如需詳細資訊,請參閱 使用 .NET CLI 發佈 .NET 應用程式

隱含還原

您不需要執行 dotnet restore ,因為所有需要還原的命令都會隱含地執行,例如 dotnet newdotnet build 、、 dotnet rundotnet testdotnet publish 、 和 dotnet pack 。 若要停用隱含還原,請使用 --no-restore 選項。

dotnet restore在明確還原的某些案例中,此命令仍然很有用,例如在Azure DevOps Services中持續整合組建,或在需要明確控制還原何時發生的組建系統中。

如需如何管理 NuGet 摘要的詳細資訊,請參閱dotnet restore

MSBuild

dotnet publish 命令會呼叫 MSBuild,這會叫用 Publish 目標。 IsPublishable 如果特定專案的 屬性設定 false 為 , Publish 則無法叫用目標,而且 dotnet publish 命令只會在專案上執行隱含的 dotnet 還原

所有傳遞給 dotnet publish 的參數都會傳遞給 MSBuild。 -c-o 參數會分別對應至 MSBuild 的 ConfigurationPublishDir 屬性。

命令 dotnet publish 接受 MSBuild 選項,例如 -p 設定屬性和 -l 定義記錄器。 例如,您可以使用下列格式來設定 MSBuild 屬性: -p:<NAME>=<VALUE>

您也可以參考 .pubxml 檔案來設定發行相關屬性。 例如:

dotnet publish -p:PublishProfile=FolderProfile

上述範例使用project_folder > /Properties/PublishProfiles 資料夾中找到 <FolderProfile.pubxml檔案。 如果您在設定 PublishProfile 屬性時指定路徑和副檔名,則會忽略它們。 MSBuild 預設會在 Properties/PublishProfiles 資料夾中尋找,並假設 pubxml 副檔名。 若要指定路徑和檔案名,包括副檔名,請設定 PublishProfileFullPath 屬性,而不是 PublishProfile 屬性。

下列 MSBuild 屬性會變更 的 dotnet publish 輸出。

  • PublishReadyToRun

    將應用程式元件編譯為 ReadyToRun (R2R) 格式。 R2R 是一種預先(AOT) 編譯。 如需詳細資訊,請參閱 ReadyToRun 映射

    若要查看可能導致執行時間失敗之遺漏相依性的警告,請使用 PublishReadyToRunShowWarnings=true

    建議您在發行設定檔中指定 PublishReadyToRun ,而不是在命令列上指定 。

  • PublishSingleFile

    將應用程式封裝成平臺特定的單一檔案可執行檔。 如需單一檔案發佈的詳細資訊,請參閱單一檔案搭配程式設計文件

    建議您在專案檔中指定此選項,而不是在命令列上指定此選項。

  • PublishTrimmed

    修剪未使用的程式庫,以在發佈獨立可執行檔時減少應用程式的部署大小。 如需詳細資訊,請參閱 修剪獨立部署和可執行檔。 自 .NET 6 SDK 起提供。

    建議您在專案檔中指定此選項,而不是在命令列上指定此選項。

如需詳細資訊,請參閱下列資源:

工作負載資訊清單下載

當您執行此命令時,它會起始工作負載廣告資訊清單的非同步背景下載。 如果下載仍在此命令完成時執行,則會停止下載。 如需詳細資訊,請參閱 廣告資訊清單

引數

  • PROJECT|SOLUTION

    要發佈的專案或方案。

    • PROJECT 是 C#、F# 或 Visual Basic 專案檔的路徑和檔案名,或是包含 C#、F# 或 Visual Basic 專案檔之目錄的路徑。 如果未指定目錄,則預設為目前目錄。

    • SOLUTION 是方案檔的路徑和檔案名, (.sln 副檔名) ,或包含方案檔之目錄的路徑。 如果未指定目錄,則預設為目前目錄。

選項

  • -a|--arch <ARCHITECTURE>

    指定目標架構。 這是設定 執行時間識別碼 (RID) 的簡短語法,其中所提供的值會與預設 RID 結合。 例如,在機器 win-x64 上,指定 --arch x86 RID 設定為 win-x86 。 如果您使用此選項,請勿使用 -r|--runtime 選項。 自 .NET 6 Preview 7 起提供。

  • -c|--configuration <CONFIGURATION>

    定義組建組態。 大部分專案的預設值為 Debug ,但您可以覆寫專案中的組建組態設定。

  • -f|--framework <FRAMEWORK>

    發行所指定目標架構的應用程式。 您必須在專案檔中指定此目標架構。

  • --force

    即使最後的還原成功,仍強制解析所有相依性。 指定這個旗標等同於刪除 project.assets.json 檔案。

  • -?|-h|--help

    列印出如何使用 命令的描述。

  • --interactive

    可讓命令停止,並等候使用者輸入或進行動作。 例如完成驗證。 自 .NET Core 3.0 SDK 起提供。

  • --manifest <PATH_TO_MANIFEST_FILE>

    指定一或多個目標資訊清單,用以修剪應用程式發行的套件集。 資訊清單檔是命令輸出的dotnet store一部分。 若要指定多個資訊清單,請為每個資訊清單新增 --manifest 選項。

  • --no-build

    不會在發佈前建置專案。 選項也會隱含設定 --no-restore 旗標。

  • --no-dependencies

    忽略專案對專案參考,並且只還原根專案。

  • --nologo

    不要顯示程式啟始橫幅或著作權訊息。

  • --no-restore

    執行命令時,不會執行隱含還原。

  • -o|--output <OUTPUT_DIRECTORY>

    指定輸出目錄的路徑。

    如果未指定,則預設為 [project_file_folder]/bin/[configuration]/[framework]/publish/ 作為架構相依可執行檔和跨平臺二進位檔。 它預設為 [project_file_folder]/bin/[configuration]/[framework]/[runtime]/publish/ 作為獨立可執行檔。

    在 Web 專案中,如果輸出檔案夾位於專案資料夾中,後續 dotnet publish 命令會產生巢狀輸出檔案夾。 例如,如果專案資料夾是 myproject,而發行輸出檔案夾是 myproject/publish,而您執行 dotnet publish 兩次,第二次執行會將 .config.json 檔案等內容檔案放在 myproject/publish/publish中。 若要避免巢狀發行資料夾,請指定不 直接 在專案資料夾底下的發佈資料夾,或從專案排除發佈資料夾。 若要排除名為 publishoutput 的 publish資料夾,請將下列元素新增至 PropertyGroup.csproj 檔案中的專案:

    <DefaultItemExcludes>$(DefaultItemExcludes);publishoutput**</DefaultItemExcludes>
    
    • .NET Core 3.x SDK 和更新版本

      如果您在發佈專案時指定相對路徑,產生的輸出目錄會相對於目前的工作目錄,而不是專案檔位置。

      如果您在發佈方案時指定相對路徑,則所有專案的輸出都會進入相對於目前工作目錄的指定資料夾。 若要讓發行輸出移至每個專案的個別資料夾,請使用 msbuild PublishDir 屬性來指定相對路徑,而不是 --output 選項。 例如, dotnet publish -p:PublishDir=.\publish 將每個專案的發佈輸出傳送至 publish 包含專案檔的資料夾下的資料夾。

    • .NET Core 2.x SDK

      如果您在發佈專案時指定相對路徑,產生的輸出目錄會相對於專案檔位置,而不是目前的工作目錄。

      如果您在發佈方案時指定相對路徑,則每個專案的輸出都會進入與專案檔位置相對的個別資料夾。 如果您在發佈方案時指定絕對路徑,則所有專案的發佈輸出都會進入指定的資料夾。

  • --os <OS>

    指定作業系統 (作業系統) 。 這是設定 執行時間識別碼 (RID) 的速記語法,其中所提供的值會與預設 RID 結合。 例如,在 win-x64 機器上,指定 --os linux RID 設定為 linux-x64 。 如果您使用此選項,請勿使用 -r|--runtime 選項。 自 .NET 6 起提供。

  • --sc|--self-contained [true|false]

    使用您的應用程式發佈 .NET 執行時間,因此不需要在目的電腦上安裝執行時間。 true如果指定了執行時間識別碼,且專案是可執行檔專案, (不是程式庫專案) ,則預設值為 。 如需詳細資訊,請參閱使用 .NET CLI 發佈和發佈 .NET 應用程式

    如果使用此選項而不指定 truefalse ,則預設值為 true 。 在此情況下,請勿在 之後 --self-contained 立即放置方案或專案引數,因為 truefalse 應該在該位置。

  • --no-self-contained

    相當於 --self-contained false

  • --source <SOURCE>

    還原作業期間要使用的 NuGet 套件來源 URI。

  • -r|--runtime <RUNTIME_IDENTIFIER>

    發行所指定執行階段的應用程式。 如需執行階段識別項 (RID) 清單,請參閱 RID 目錄。 如需詳細資訊,請參閱使用 .NET CLI 發佈和發佈 .NET 應用程式 如果您使用此選項,請使用 --self-contained--no-self-contained

  • -v|--verbosity <LEVEL>

    設定命令的詳細資訊層級。 允許的值為 q[uiet]m[inimal]n[ormal]d[etailed]diag[nostic]。 預設為 minimal。 如需詳細資訊,請參閱LoggerVerbosity

  • --use-current-runtime, --ucr [true|false]

    RuntimeIdentifier根據您的電腦之一,將 設定為可攜 RuntimeIdentifier 式平臺。 這會隱含地與需要 RuntimeIdentifier 的屬性一起發生,例如 SelfContainedPublishAotPublishSelfContainedPublishSingleFilePublishReadyToRun 。 如果屬性設定為 false,則不會再發生隱含解析。

  • --version-suffix <VERSION_SUFFIX>

    定義要取代專案檔案的版本欄位中之星號 (*) 的版本尾碼。

範例

  • 為目前目錄中的專案建立 與架構相依的跨平臺二進位檔

    dotnet publish
    

    從 .NET Core 3.0 SDK 開始,此範例也會建立目前平臺 的架構相依可執行檔

  • 針對特定執行時間,為目前目錄中的專案建立 獨立的可執行檔

    dotnet publish --runtime osx.10.11-x64
    

    RID 必須位於專案檔中。

  • 針對特定平臺,為目前目錄中的專案建立 架構相依可執行檔

    dotnet publish --runtime osx.10.11-x64 --self-contained false
    

    RID 必須位於專案檔中。 此範例適用于 .NET Core 3.0 SDK 和更新版本。

  • 針對特定執行時間和目標架構,發佈目前目錄中的專案:

    dotnet publish --framework netcoreapp3.1 --runtime osx.10.11-x64
    
  • 發佈指定的專案檔:

    dotnet publish ~/projects/app1/app1.csproj
    
  • 發佈目前的應用程式,但不會還原專案對專案 (P2P) 參考,只是還原作業期間的根專案:

    dotnet publish --no-dependencies
    

另請參閱