本文适用于:✔️ .NET 6 SDK 及更高版本
Name
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 可能会发生这种情况,以避免生成和包目标之间的循环依赖关系。 如果存在锁定的文件或其他问题,生成也可能失败。
可以为打包过程提供 dotnet pack 命令的 MSBuild 属性。 有关详细信息,请参阅 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中,或在需要显式控制还原发生时间的生成系统中,dotnet restore 命令仍然有用。
有关如何使用 NuGet 源的信息,请参阅 dotnet restore 文档。
以长格式传入时,此命令支持 dotnet restore 选项(例如,--source)。 不支持缩写选项,例如 -s。
工作负载清单下载
运行此命令时,它将为工作负载启动播发清单的异步后台下载。 如果此命令完成后,下载仍在运行,则将停止下载。 有关详细信息,请参阅播发清单。
Arguments
PROJECT | SOLUTION
要打包的项目或解决方案。 它是 csproj、vbproj 或 fsproj 文件或解决方案文件或目录的路径。 如果未指定,该命令将在当前目录中搜索项目或解决方案文件。
选项
--artifacts-path <ARTIFACTS_DIR>执行命令中的所有生成输出文件都将位于指定路径下的子文件夹中,由项目分隔。 有关详细信息,请参阅 Artifacts 输出布局。 自 .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而不是Version使用。 例如,如果是VersionPrefix0.1.2并且你传递给--version-suffix rc.1dotnet pack,则包版本将为0.1.2-rc.1。如果有
Version一个值,并且传递给--version-suffixdotnet pack该值,则忽略指定的--version-suffix值。
-?|-h|--help打印出有关如何使用命令的说明。
例子
将项目打包到当前目录中:
dotnet packapp1打包项目: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.0PackageVersion: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以下资源: