添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

dotnet publish :將應用程式與其相依性發行至資料夾中,以部署至主機系統。

dotnet publish [<PROJECT>|<SOLUTION>] [-a|--arch <ARCHITECTURE>]
    [-c|--configuration <CONFIGURATION>] [--disable-build-servers]
    [-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檔案。
  • .runtime.config.json 檔案,此檔案會指定應用程式預期的共用執行階段,以及執行階段的其他設定選項 (例如記憶體回收類型)。
  • 應用程式的相依性,這些相依性會從 NuGet 快取複製到輸出資料夾。
  • dotnet publish 命令的輸出已準備好部署到裝載系統 (例如伺服器、電腦、Mac、膝上型電腦) 以供執行。 這是準備應用程式以供部署的唯一正式支援的方法。 視專案指定的部署類型而定,主控系統可能或可能未安裝 .NET 共用執行時間。 如需詳細資訊,請參閱 使用 .NET CLI 發佈 .NET 應用程式

    您不必執行 dotnet restore,因為其會由需要進行還原的所有命令隱含執行,例如 dotnet newdotnet builddotnet rundotnet testdotnet publishdotnet pack。 若要停用隱含還原,請使用 --no-restore 選項。

    dotnet restore 命令在適合進行明確還原的特定案例中仍可派上用場,例如 Azure DevOps Services 中的持續整合組建,或在需要明確控制何時進行還原的組建系統中。

    如需了解如何管理 NuGet 摘要,請參閱 dotnet restore 文件

    MSBuild

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

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

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

    .pubxml 檔案

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

    dotnet publish -p:PublishProfile=FolderProfile
    

    上述範例使用位於 <project_folder>/Properties/PublishProfiles 資料夾中的 FolderProfile.pubxml 檔案。 如果您在設定 PublishProfile 屬性時指定路徑和副檔名,則會忽略它們。 根據預設,MSBuild 會查看 Properties/PublishProfiles 資料夾,並採用 pubxml 副檔名。 若需指定路徑和包括副檔名在內的檔案名稱,請不要設定 PublishProfile 屬性,改為設定 PublishProfileFullPath 屬性。

    .pubxml 檔案中:

  • Visual Studio 會使用 PublishUrl 表示發行目標。
  • CLI 會使用 PublishDir 表示發行目標。
  • 如果您希望讓案例在所有位置都能運作,可以初始化這兩個屬性,使值與 .pubxml 檔案的相同。 解決 GitHub 問題 dotnet/sdk#20931 後,僅需設定其中一個屬性。

    .pubxml 檔案中的部分屬性僅適用於 Visual Studio,且對 dotnet publish 沒有作用。 我們正致力於讓 CLI 與 Visual Studio 的行為更一致。 但有些屬性是 CLI 絕對不會使用的。 CLI 與 Visual Studio 都會執行發行作業的封裝層面,而 dotnet/sdk#29817 計劃新增更多與此相關的支援。 但 CLI 不會執行發佈的部署自動化層面,以及與不支援之相關的屬性。 最值得注意的 .pubxml 屬性不受支援 dotnet publish ,是影響組建的下列屬性:

  • LastUsedBuildConfiguration
  • Configuration
  • Platform
  • LastUsedPlatform
  • TargetFramework
  • TargetFrameworks
  • RuntimeIdentifier
  • RuntimeIdentifiers
  • MSBuild 屬性

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

  • PublishReadyToRun

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

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

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

  • PublishSingleFile

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

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

  • PublishTrimmed

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

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

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

  • MSBuild 命令列參考
  • Visual Studio 發佈設定檔 (.pubxml) 以進行應用程式部署 ASP.NET Core
  • dotnet msbuild
  • 工作負載資訊清單下載作業

    執行此命令會啟動工作負載公告資訊清單的非同步背景下載。 若此命令完成時下載仍在執行,則會停止下載。 如需詳細資訊,請參閱公告資訊清單

  • PROJECT|SOLUTION

    要發佈的專案或解決方案。

  • PROJECT 是 C#、F# 或 Visual Basic 專案檔的路徑與檔案名稱,或包含 C#、F# 或 Visual Basic 專案檔的目錄路徑。 如未指定目錄,系統會將其預設為當前的目錄。

  • SOLUTION 為解決方案檔案的路徑和檔案名稱 (副檔名為 .sln),或為包含解決方案之目錄的路徑。 如未指定目錄,系統會將其預設為當前的目錄。

  • --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。 若要避免巢狀發行資料夾,請指定不 直接 在專案資料夾下的 publish 資料夾,或從專案中排除 publish 資料夾。 若要排除名為 [publishoutput] 的發行資料夾,請將下列元素新增至 .csproj 檔案中的 PropertyGroup 元素:

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

    如果您在解決方案上執行此命令時指定 --output 選項,則 CLI 將會因輸出路徑語意不清楚而發出警告 (7.0.200 中的錯誤)。 不允許 --output 選項,因為所有已建置專案的所有輸出都會複製至指定的目錄,而這與多目標專案以及具有不同直接和可轉移相依性版本的專案都不相容。 如需詳細資訊,請參閱解決方案層級的 --output 選項不再適用組建相關命令

  • .NET Core 3.x SDK 和更新版本

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

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

  • .NET Core 2.x SDK

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

    如果您在發行解決方案時指定了相對路徑,則每項專案的輸出會進入相對於專案檔位置的個別目錄。 如果您在發行解決方案時指定了絕對路徑,則所有專案的一切發行輸出都會進入指定資料夾。

  • --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 和更新版本。

  • 針對特定執行階段和目標 Framework,在當前目錄中發行專案:

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

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

    dotnet publish --no-dependencies
    
  • .NET 應用程式發佈概觀
  • 使用 .NET CLI 發佈 .NET 應用程式
  • 執行階段識別碼 (RID) 目錄
  • 使用 dotnet publish 將 .NET 應用程式容器化
  • 使用 macOS Catalina Notarization
  • 已發行應用程式的目錄結構
  • MSBuild 命令列參考
  • Visual Studio 發佈設定檔 (.pubxml) 以進行應用程式部署 ASP.NET Core
  • dotnet msbuild
  • 修剪獨立部署
  •