此文章適用於:✔️ .NET 6 SDK 與更新版本
名稱
dotnet pack - 將程式碼封裝成 NuGet 套件。
概要
dotnet pack [<PROJECT>|<SOLUTION>]
[--artifacts-path <ARTIFACTS_DIR>] [-c|--configuration <CONFIGURATION>]
[--disable-build-servers] [--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
Description
此 dotnet pack 命令會建置專案並建立 NuGet 套件。 此命令的結果是 NuGet 套件 (也就是 .nupkg 檔案) 。
如果您想要產生包含除錯符號的套件,您有兩個選項可供使用:
-
--include-symbols- 它會建立符號套件。 -
--include-source- 它會建立符號套件,其中包含包含src來源檔案的資料夾。
封裝專案的 NuGet 相依性會新增至 .nuspec 檔案,因此在安裝套件時會正確解析它們。 如果封裝專案有其他專案的參考,則其他專案不會包含在套件中。 目前,如果您有專案對專案相依性,則每個專案必須有一個套件。
依預設, dotnet pack 會先建置專案。 如果您想要避免此行為,請傳遞選項 --no-build 。 此選項在您知道先前已建置程式碼的持續整合 (CI) 建置案例中通常很有用。
備註
在某些情況下,無法執行隱含建置。 設定時 GeneratePackageOnBuild 可能會發生這種情況,以避免建置和封裝目標之間的循環相依性。 如果存在鎖定的檔案或其他問題,建置也可能失敗。
您可以將 MSBuild 屬性 dotnet pack 提供給封裝程式的命令。 如需詳細資訊,請參閱 NuGet 套件目標屬性 和 MSBuild Command-Line 參考。 範例 一 節示範如何在數個不同的案例中使用 MSBuild -p 參數。
備註
Web 專案無法封裝。
隱含還原
您不必執行 dotnet restore,因為其會由需要進行還原的所有命令隱含執行,例如 dotnet new、dotnet build、dotnet run、dotnet test、dotnet publish 和 dotnet pack。 若要停用隱含還原,請使用 --no-restore 選項。
dotnet restore 命令在適合進行明確還原的特定案例中仍可派上用場,例如 Azure DevOps Services 中的持續整合組建,或在需要明確控制何時進行還原的組建系統中。
如需了解如何管理 NuGet 摘要,請參閱 dotnet restore 文件。
此命令支援以完整形式傳入的 dotnet restore 選項 (例如 --source)。 不支援簡短形式選項,例如 -s。
工作負載資訊清單下載
執行此命令會啟動工作負載公告資訊清單的非同步背景下載。 若此命令完成時下載仍在執行,則會停止下載。 如需詳細資訊,請參閱廣告資訊清單。
Arguments
PROJECT | SOLUTION
要打包的專案或解決方案。 它是 csproj、vbproj 或 fsproj 檔案的路徑,或解決方案檔案或目錄的路徑。 如果未指定,命令會在目前目錄中搜尋專案或解決方案檔案。
選項
-
--artifacts-path <ARTIFACTS_DIR>執行命令的所有建置輸出檔案都會位於指定路徑下的子資料夾中,並以專案分隔。 如需詳細資訊,請參閱 成品輸出配置。 自 .NET 8 SDK 起提供。
-
-c|--configuration <CONFIGURATION>定義組建組態。 如果您要使用 .NET 8 SDK 或更新版本進行開發,此命令預設會針對 TargetFramework 設為
Release或更新版本的專案使用net8.0組態。 舊版 SDK 和舊版目標架構的預設組建組態Debug。 您可以在項目設定中覆寫預設值,或使用此選項。 如需詳細資訊,請參閱 'dotnet publish' 使用發行組態,'dotnet pack' 使用發行組態。 -
--disable-build-servers強制命令忽略任何持續性組建伺服器。 此選項提供一致的方式來停用所有建置快取的使用,以強制從頭開始建置。 當快取可能損毀或因某些原因而不正確時,不依賴快取的組建很有用。 自 .NET 7 SDK 起提供。
--force即使最後的還原成功,仍強制解析所有相依性。 指定這個旗標等同於刪除 project.assets.json 檔案。
--include-source除了輸出目錄中的一般 NuGet 套件之外,還包含偵錯符號 NuGet 套件。 來源檔案包含在符號套件內的資料夾中
src。--include-symbols除了輸出目錄中的一般 NuGet 套件之外,還包含偵錯符號 NuGet 套件。
-
--interactive可讓命令停止,並等候使用者輸入或進行動作。 例如完成驗證。
--no-build在封裝之前不建置專案。 選項也會隱含設定
--no-restore旗標。--no-dependencies忽略專案對項目參考,而且只會還原根專案。
--no-restore執行命令時,不會執行隱含還原。
--nologo不要顯示程式啟始橫幅或著作權訊息。
-o|--output <OUTPUT_DIRECTORY>將建置的套件放在指定的目錄中。
.NET 7.0.200 SDK
在 7.0.200 SDK 中,如果您在解決方案上執行此命令時指定
--output選項,CLI 會發出錯誤。 這是迴歸,已在 7.0.201 和更新版本的 .NET SDK 中修正。
--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>定義 MSBuild 屬性的
VersionSuffix值。 此屬性對套件版本的影響取決於 和VersionVersionPrefix屬性的值,如下表所示:具有值的屬性 套件版本 None 1.0.0Version$(Version)僅限 VersionPrefix$(VersionPrefix)僅限 VersionSuffix1.0.0-$(VersionSuffix)VersionPrefix和VersionSuffix$(VersionPrefix)-$(VersionSuffix)如果要使用
--version-suffix,請在專案檔中指定VersionPrefix和 notVersion。 例如,如果 isVersionPrefix並且您傳遞0.1.2給--version-suffix rc.1,則dotnet pack套件版本將是0.1.2-rc.1。如果具有值,且您傳遞給 ,則
Version會忽略 為 指定的--version-suffix值。dotnet pack--version-suffix-
-?|-h|--help輸出有關如何使用命令的說明。
範例
將專案打包到目前目錄中:
dotnet pack打包
app1專案:dotnet pack ~/projects/app1/project.csproj將專案打包到目前的目錄中,並將產生的套件放入資料夾
nupkgs中:dotnet pack --output nupkgs將目前目錄中的專案打包到資料夾中
nupkgs,並略過建置步驟:dotnet pack --no-build --output nupkgs使用專案的版本尾碼設定
<VersionSuffix>$(VersionSuffix)</VersionSuffix>為 .csproj 檔案中,封裝目前的專案,並使用指定的尾碼更新產生的套件版本:dotnet pack --version-suffix "ci-1234"使用 MSBuild 屬性將
2.1.0套件版本設定為PackageVersion:dotnet pack -p:PackageVersion=2.1.0針對特定 目標架構封裝專案:
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如需如何使用
NuspecFile、NuspecBasePath和NuspecProperties的相關資訊,請參閱下列資源: