共用方式為


dotnet pack

本文適用於: ✔️ .NET Core 3.1 SDK 與更新版本

名稱

dotnet pack - 將程式碼封裝到 NuGet 套件。

概要

dotnet pack [<PROJECT>|<SOLUTION>] [--artifacts-path <ARTIFACTS_DIR>]
    [-c|--configuration <CONFIGURATION>] [--force]
    [--include-source] [--include-symbols] [--interactive]
    [--no-build] [--no-dependencies] [--no-restore] [--nologo]
    [-o|--output <OUTPUT_DIRECTORY>] [--runtime <RUNTIME_IDENTIFIER>]
    [-s|--serviceable] [--tl:[auto|on|off]] [-v|--verbosity <LEVEL>]
    [--version-suffix <VERSION_SUFFIX>]

dotnet pack -h|--help

描述

dotnet pack 命令會建置專案,並建立 NuGet 套件。 此命令會產生 NuGet 套件 (亦即 .nupkg 檔案)。

若您想產生包含偵錯符號的套件,您可以使用兩種選項:

  • --include-symbols - 這會建立符號套件。
  • --include-source - 這會建立符號套件,內有包含來源檔案的 src 資料夾。

封裝專案的 NuGet 相依性會新增至 .nuspec 檔案,因此在安裝套件時可以正確地解析它們。 若封裝的專案有其他專案的參考,套件就不會包含其他專案。 目前,如果您有專案對專案相依性,則必須一個專案各一個套件。

dotnet pack 預設會先建置專案。 如果您想要避免這種行為,請傳遞 --no-build 選項。 這個選項通常適用於您知道先前剛建立程式碼的持續整合 (CI) 組建案例。

注意

隱含組建在某些情況下無法執行。 設定了 GeneratePackageOnBuild 的時候就可能發生這種情況,以避免組建和套件目標之間出現循環相依性。 若有鎖定的檔案或其他問題,組建也可能會失敗。

您可以提供 MSBuild 屬性給 dotnet pack 命令來壓縮程序。 如需詳細資訊,請參閱 NuGet 套件目標屬性以及 MSBuild 命令列參考範例一節會針對幾個不同的案例,示範如何使用 MSBuild -p 參數。

注意

Web 專案無法封裝。

隱含還原

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

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

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

此命令支援以完整形式傳入的 dotnet restore 選項 (例如 --source)。 不支援簡短形式選項,例如 -s

工作負載資訊清單下載

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

引數

PROJECT | SOLUTION

要封裝的專案或解決方案。 這可以是 csproj、vbproj 或 fsproj 檔案的路徑,也可以是解決方案檔案或目錄的路徑。 如未指定,則命令會在目前的目錄中搜尋專案或解決方案檔案。

選項。

  • --artifacts-path <ARTIFACTS_DIR>

    執行命令的所有建置輸出檔案都會位於指定路徑下的子資料夾中,並以專案分隔。 如需詳細資訊,請參閱 成品輸出配置。 自 .NET 8 SDK 起提供。

  • -c|--configuration <CONFIGURATION>

    定義組建組態。 如果您要使用 .NET 8 SDK 或更新版本進行開發,此命令預設會針對 TargetFramework 設定為 net8.0 或更新版本的專案使用Release組態。 默認組建組態適用於 Debug 舊版SDK和舊版目標架構。 您可以在項目設定中覆寫預設值,或使用此選項。 如需詳細資訊,請參閱 'dotnet publish' 使用發行組態 ,而 'dotnet pack' 使用發行組態

  • --force

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

  • -?|-h|--help

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

  • --include-source

    在輸出目錄中包含偵錯符號 NuGet 套件以及一般的 NuGet 套件。 來源檔案會包含在符號套件內的 src 資料夾中。

  • --include-symbols

    在輸出目錄中包含偵錯符號 NuGet 套件以及一般的 NuGet 套件。

  • --interactive

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

  • --no-build

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

  • --no-dependencies

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

  • --no-restore

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

  • --nologo

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

  • -o|--output <OUTPUT_DIRECTORY>

    將已建置的套件放置在指定的目錄中。

    • .NET 7.0.200 SDK

      在 7.0.200 SDK 中,若您在針對解決方案執行此命令時指定 --output 選項,則 CLI 會發出錯誤。 此為迴歸,且在 .NET SDK 7.0.201 以上版本皆已修正。

  • --runtime <RUNTIME_IDENTIFIER>

    指定要還原套件的目標執行階段。 如需執行階段識別項 (RID) 清單,請參閱 RID 目錄

  • -s|--serviceable

    在套件中設定可提供服務的旗標。 如需詳細資訊,請參閱 .NET 部落格︰.NET Framework 4.5.1 支援適用於 .NET NuGet 程式庫的 Microsoft 安全性更新 (英文)

  • --tl:[auto|on|off]

    指定終端記錄器是否應該用於組建輸出。 預設值為 auto,這會先驗證環境,再啟用終端記錄。 環境檢查會驗證終端是否能夠使用新式輸出功能,而且在啟用新的記錄器之前,不會使用重新導向的標準輸出。 on 略過環境檢查並啟用終端記錄。 off 略過環境檢查並使用預設控制台記錄器。

    終端記錄器會顯示還原階段,後面接著建置階段。 在每個階段,目前建置的專案會出現在終端底部。 建置的每個專案都會輸出目前建置的 MSBuild 目標,以及花費在該目標上的時間量。 您可以搜尋此資訊以深入了解組建。 當專案完成建置時,撰寫了單一「已完成建置」區段來擷取:

    • 所建置專案的名稱。
    • 目標架構 (如果為多目標)。
    • 該組建的狀態。
    • 該組建的主要輸出 (已有超連結)。
    • 任何針對該專案產生的診斷。

    此選項從 .NET 8 開始提供使用。

  • -v|--verbosity <LEVEL>

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

  • --version-suffix <VERSION_SUFFIX>

    定義 VersionSuffix MSBuild 屬性的值。 此屬性對套件版本的影響取決於 VersionVersionPrefix 屬性的值,如下表所示:

    包含值的屬性 套件版本
    1.0.0
    Version $(Version)
    僅限 VersionPrefix $(VersionPrefix)
    僅限 VersionSuffix 1.0.0-$(VersionSuffix)
    VersionPrefixVersionSuffix $(VersionPrefix)-$(VersionSuffix)

    若您想要使用 --version-suffix,請在專案檔中指定 VersionPrefix,而不要指定 Version。 例如,若 VersionPrefix0.1.2,且您將 --version-suffix rc.1 傳遞至 dotnet pack,則套件版本會是 0.1.2-rc.1

    Version 具有值,且您將 --version-suffix 傳遞至 dotnet pack,則會忽略 --version-suffix 指定的值。

範例

  • 封裝目前目錄中的專案:

    dotnet pack
    
  • 封裝 app1 專案:

    dotnet pack ~/projects/app1/project.csproj
    
  • 封裝目前目錄中的專案,並將產生的套件放置到 nupkgs 資料夾中:

    dotnet pack --output nupkgs
    
  • 將目前目錄中的專案封裝到 nupkgs 資料夾,並略過建置步驟︰

    dotnet pack --no-build --output nupkgs
    
  • .csproj 檔案中將專案的版本尾碼設定為 <VersionSuffix>$(VersionSuffix)</VersionSuffix>,封裝目前的專案並使用指定尾碼更新產生的套件版本︰

    dotnet pack --version-suffix "ci-1234"
    
  • 使用 PackageVersion MSBuild 屬性將封裝版本設定為 2.1.0

    dotnet pack -p:PackageVersion=2.1.0
    
  • 將專案針對特定目標 Framework 進行封裝:

    dotnet pack -p:TargetFrameworks=net45
    
  • 封裝專案,並使用特定的運行時間 (Windows) 進行還原作業:

    dotnet pack --runtime win-x64
    
  • 使用 .nuspec 檔案來封裝專案:

    dotnet pack ~/projects/app1/project.csproj -p:NuspecFile=~/projects/app1/project.nuspec -p:NuspecBasePath=~/projects/app1/nuget
    

    如需了解如何使用 NuspecFileNuspecBasePathNuspecProperties,請參閱下列資源: