pack 命令 (NuGet CLI)

适用于:包创建 • 支持的版本:2.7 及以上版本

基于指定的 .nuspec 或项目文件创建 NuGet 包。 dotnet pack 命令(请参阅 dotnet 命令)和 msbuild -t:pack(请参阅 MSBuild 目标)可用作备用命令。

重要

dotnet packmsbuild -t:pack 用于基于 PackageReference 的项目。 从 NuGet 版本 6.5 及以上版本开始,尝试打包这些项目类型时,pack 命令会出错。 先前版本会尝试打包,但生成的包可能不正确。 在 Mono 中,不支持从项目文件创建包。 还需将 .nuspec 文件中的非本地路径调整为 UNIX 式路径,因为 nuget.exe 自身不会转换 Windows 路径名称。

使用情况

nuget pack <nuspecPath | projectPath> [options] [-Properties ...]

其中,<nuspecPath><projectPath> 会分别指定 .nuspec 或项目文件。

选项

  • -BasePath

    设置在 .nuspec 文件中所定义文件的基路径。

  • -Build

    指定项目应在生成包之前生成。

  • -ConfigFile

    要应用的 NuGet 配置文件。 如果未指定,则使用 %AppData%\NuGet\NuGet.Config(适用于 Windows)或是 ~/.nuget/NuGet/NuGet.Config~/.config/NuGet/NuGet.Config(适用于 Mac/Linux)。

  • -Exclude

    指定在创建包时要排除的一个或多个通配符模式。 若要指定多个模式,请重复使用 -Exclude 标志。 请参阅以下示例。

  • -ExcludeEmptyDirectories

    生成包时,阻止包含空目录。

  • -ForceEnglishOutput

    (3.5+) 使用固定的、基于英语的区域性强制 nuget.exe 运行。

  • -?|-help

    显示此命令的帮助信息。

  • -IncludeReferencedProjects

    指示生成的包应包含引用的项目,以将其作为依赖项或包的一部分。 如果引用的项目具有与项目同名的对应 .nuspec 文件,则将引用的项目添加为依赖项。 否则,将引用的项目添加为包的一部分。

  • -InstallPackageToOutputPath

    指定该命令是否应准备包输出目录以支持作为源进行共享。

  • -MinClientVersion

    为已创建的包设置 minClientVersion 属性。 此值将替代 .nuspec 文件中现有 minClientVersion 属性(如果有)的值。

  • -MSBuildPath

    (4.0+) 指定要与该命令一起使用的 MSBuild 的路径,从而优先于 -MSBuildVersion

  • -MSBuildVersion

    (3.2+) 指定要此命令一起使用的 MSBuild 的版本。 支持的值为 4、12、14、15.1、15.3、15.4、15.5、15.6、15.7、15.8、15.9。 默认情况下,会选择路径中的 MSBuild,否则它默认为已安装的最高 MSBuild 版本。

  • -NoDefaultExcludes

    阻止默认排除以点开头的 NuGet 包文件、文件和文件夹,例如 .svn.gitignore

  • -NonInteractive

    不为用户输入或确认显示提示。

  • -NoPackageAnalysis

    指定 pack 不应在生成包后运行包分析。

  • -OutputDirectory

    指定在其中存储已创建包的文件夹。 如果未指定文件夹,则使用当前文件夹。

  • -OutputFileNamesWithoutVersion

    指定该命令是否应准备不带版本的包输出名称。

  • -PackagesDirectory

    指定包文件夹。

  • -p|-Properties

    应在命令行上的其他选项之后最后一个显示。 指定要覆盖项目文件中的值的属性列表;有关属性名称,请参阅通用 MSBuild 项目属性。 此处的 Properties 参数为 token=value pairs 的列表(用分号分隔),其中 .nuspec 文件中出现的每个 $token$ 均会用给定值替换。 值可以是用引号括起来的字符串。 请注意,对于“Configuration”属性,默认值为“Debug”。 若要改用“发布”配置,请使用 -Properties Configuration=Release一般情况下,属性应与相应项目生成期间使用的属性相同,以避免潜在的怪异行为。

  • -SolutionDirectory

    指定解决方案目录。

  • -Suffix

    (3.4.4+) 将后缀追加到内部生成的版本号,它通常用于追加生成或其他预发行标识符。 例如,使用 -suffix nightly 将创建版本号如 1.2.3-nightly 的包。 后缀必须以字母开头,以避免出现针对不同版本的 NuGet 和 NuGet 包管理器的警告、错误和潜在不兼容问题。

  • -SymbolPackageFormat

    创建符号包时,允许在 snupkgsymbols.nupkg 格式之间进行选择。

  • -Symbols

    指定包包含源和符号。 与 .nuspec 文件一起使用时,它将创建常规 NuGet 包文件和相应的符号包。 默认情况下,它会创建旧符号包。 符号包的新推荐格式为 .snupkg。 请参阅创建符号包 (.snupkg)

  • -Tool

    指定项目的输出文件应放在包的 tools 文件夹中。

  • -Verbosity [normal|quiet|detailed]

    指定输出中显示的细节量:normal(默认值)、quietdetailed

  • -Version

    覆盖 .nuspec 文件中的版本号。

另请参阅环境变量

排除开发依赖项

某些 NuGet 包作为开发依赖项时很有用,因为它们可帮助创作自己的库,但不一定需用作实际包依赖项。

pack 命令会忽略 packages.config 中将 developmentDependency 属性设为 truepackage 条目。 这些条目不会作为依赖项而包含在创建的包中。

例如,请考虑源项目中的以下 packages.config 文件:

<?xml version="1.0" encoding="utf-8"?>
<packages>
    <package id="jQuery" version="1.5.2" />
    <package id="netfx-Guard" version="1.3.3.2" developmentDependency="true" />
    <package id="microsoft-web-helpers" version="1.15" />
</packages>

对于此项目,nuget pack 创建的包将依赖于 jQuerymicrosoft-web-helpers,但不依赖 netfx-Guard

不显示打包警告

虽然推荐在打包操作期间解决所有 NuGet 警告,但在某些情况下可不显示这些警告。

可通过以下方式实现此目的:

nuget.exe pack package.nuspec -Properties NoWarn=NU5104

示例

nuget pack

nuget pack foo.nuspec

nuget pack foo.csproj

nuget pack foo.csproj -Properties Configuration=Release

nuget pack foo.csproj -Build -Symbols -Properties owners=janedoe,xiaop;version="1.0.5"

# Create a package from project foo.csproj, using MSBuild version 12 to build the project
nuget pack foo.csproj -Build -Symbols -MSBuildVersion 12 -Properties owners=janedoe,xiaop;version="1.0.5"

# Create a package from project foo.nuspec and the corresponding symbol package using the new recommended format .snupkg
nuget pack foo.nuspec -Symbols -SymbolPackageFormat snupkg

nuget pack foo.nuspec -Version 2.1.0

nuget pack foo.nuspec -Version 1.0.0 -MinClientVersion 2.5

nuget pack Package.nuspec -exclude "*.exe" -exclude "*.bat"

注意

不支持针对 SDK 式项目的 pack 命令,而应改用 dotnet packmsbuild -t:pack 来打包这些项目。