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 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
。
執行此命令會啟動工作負載公告資訊清單的非同步背景下載。 若此命令完成時下載仍在執行,則會停止下載。 如需詳細資訊,請參閱廣告資訊清單。
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 屬性的值。 此屬性對套件版本的影響取決於Version
和VersionPrefix
屬性的值,如下表所示:包含值的屬性 套件版本 無 1.0.0
Version
$(Version)
僅限 VersionPrefix
$(VersionPrefix)
僅限 VersionSuffix
1.0.0-$(VersionSuffix)
VersionPrefix
和VersionSuffix
$(VersionPrefix)-$(VersionSuffix)
若您想要使用
--version-suffix
,請在專案檔中指定VersionPrefix
,而不要指定Version
。 例如,若VersionPrefix
為0.1.2
,且您將--version-suffix rc.1
傳遞至dotnet pack
,則套件版本會是0.1.2-rc.1
。若
Version
具有值,且您將--version-suffix
傳遞至dotnet pack
,則會忽略--version-suffix
指定的值。
封裝目前目錄中的專案:
.NET CLIdotnet pack
封裝
app1
專案:.NET CLIdotnet pack ~/projects/app1/project.csproj
封裝目前目錄中的專案,並將產生的套件放置到
nupkgs
資料夾中:.NET CLIdotnet pack --output nupkgs
將目前目錄中的專案封裝到
nupkgs
資料夾,並略過建置步驟︰.NET CLIdotnet pack --no-build --output nupkgs
在 .csproj 檔案中將專案的版本尾碼設定為
<VersionSuffix>$(VersionSuffix)</VersionSuffix>
,封裝目前的專案並使用指定尾碼更新產生的套件版本︰.NET CLIdotnet pack --version-suffix "ci-1234"
使用
PackageVersion
MSBuild 屬性將封裝版本設定為2.1.0
:.NET CLIdotnet pack -p:PackageVersion=2.1.0
將專案針對特定目標 Framework 進行封裝:
.NET CLIdotnet pack -p:TargetFrameworks=net45
封裝專案,並使用特定的運行時間 (Windows) 進行還原作業:
.NET CLIdotnet pack --runtime win-x64
使用 .nuspec 檔案來封裝專案:
.NET CLIdotnet pack ~/projects/app1/project.csproj -p:NuspecFile=~/projects/app1/project.nuspec -p:NuspecBasePath=~/projects/app1/nuget
如需了解如何使用
NuspecFile
、NuspecBasePath
和NuspecProperties
,請參閱下列資源: