CPack NuGet 生成器

在 3.12 版中添加。

在构建 NuGet 包时,没有由于 NuGet 相应的 CLI 选项的缺失而直接控制输出文件名的途径,因此没有 CPACK_NUGET_PACKAGE_FILE_NAME 变量。NuGet 根据内置规则使用包名称和版本来形成输出文件名。

还要注意,此生成器会忽略顶级目录(CPACK_INCLUDE_TOPLEVEL_DIRECTORY)。

CPack NuGet 生成器特定变量

CPack NuGet 生成器可用于使用 CPack 创建 NuGet 包。CPack NuGet 生成器是一个 CPack 生成器,因此它使用 CPack 使用的 CPACK_XXX 变量。

CPack NuGet 生成器具有受特定 CPACK_NUGET_XXX 变量控制的特定功能。“一组一”模式中(参见 CPACK_COMPONENTS_GROUPING),以下变量中 <compName> 占位符将包含组名称(大写并转换为“C”标识符)。

CPack NuGet 生成器特定变量的列表

CPACK_NUGET_COMPONENT_INSTALL

为 CPack NuGet 生成器启用组件打包

强制:

默认:

OFF

CPACK_NUGET_PACKAGE_DEBUG

执行 CPack NuGet 生成器时启用调试消息。

强制:

默认:

OFF

必需元数据变量

CPACK_NUGET_PACKAGE_NAME
CPACK_NUGET_<compName>_PACKAGE_NAME

NUGET 包名称。 CPACK_NUGET_PACKAGE_NAME 用作 nuget.org 上的 id

强制:

默认:

CPACK_PACKAGE_NAME

CPACK_NUGET_PACKAGE_VERSION
CPACK_NUGET_<compName>_PACKAGE_VERSION

NuGet 包版本。

强制:

默认:

CPACK_PACKAGE_VERSION

CPACK_NUGET_PACKAGE_DESCRIPTION
CPACK_NUGET_<compName>_PACKAGE_DESCRIPTION

用于在 UI 中显示的长包描述。

强制:

默认:
CPACK_NUGET_PACKAGE_AUTHORS
CPACK_NUGET_<compName>_PACKAGE_AUTHORS

包作者的逗号分隔列表,匹配 nuget.org 上的个人资料名称。这些信息会在 nuget.org 的 NuGet Gallery 中显示,并且用于交叉引用同一作者的包。

强制:

默认:

CPACK_PACKAGE_VENDOR

可选元数据变量

CPACK_NUGET_PACKAGE_OWNERS
CPACK_NUGET_<compName>_PACKAGE_OWNERS

已弃用,自 3.30 版本起:改为使用作者 (CPACK_NUGET_PACKAGE_AUTHORS)。

使用 nuget.org 上的个人资料名称列出的包创建者的逗号分隔列表。此列表通常与作者中的列表相同,并且在将包上传至 nuget.org 时会被忽略。

强制:

默认:

CPACK_NUGET_PACKAGE_HOMEPAGE_URL
CPACK_NUGET_<compName>_PACKAGE_HOMEPAGE_URL

包主页的 URL,通常也会在 UI 显示以及 nuget.org 中显示。

强制:

默认:

CPACK_PACKAGE_HOMEPAGE_URL

CPACK_NUGET_PACKAGE_LICENSEURL
CPACK_NUGET_<compName>_PACKAGE_LICENSEURL

从版本 3.20 起弃用:改用本地许可文件 (CPACK_NUGET_PACKAGE_LICENSE_FILE_NAME) 或 SPDX 许可标识符 (CPACK_NUGET_PACKAGE_LICENSE_EXPRESSION)。

用于显示软件包许可证的 URL,通常会显示在 UI 界面 ainsi que nuget.org 上。

强制:

默认:

支持:

NuGet 4.9.0 及更高版本

CPACK_NUGET_PACKAGE_LICENSE_FILE_NAME
CPACK_NUGET_<compName>_PACKAGE_LICENSE_FILE_NAME

在版本 3.20 中添加。

.txt.md 格式的软件包许可证文件。

如果指定了 CPACK_NUGET_PACKAGE_LICENSE_FILE_NAMECPACK_NUGET_PACKAGE_LICENSE_EXPRESSION 将被忽略。

强制:

默认:

支持:

NuGet 4.9.0 及更高版本

CPACK_NUGET_PACKAGE_LICENSE_EXPRESSION
CPACK_NUGET_<compName>_PACKAGE_LICENSE_EXPRESSION

在版本 3.20 中添加。

用于表示软件包数据交换 SPDX 许可证标识符,例如 MITBSD-3-ClauseLGPL-3.0-or-later。对于许可证选择或更复杂的限制,可以使用布尔运算符来形成复合许可证表达式,例如 MIT OR BSD-3-Clause。有关形成复杂许可证表达式的指引,请参阅 SPDX 规范

如果指定了 CPACK_NUGET_PACKAGE_LICENSE_FILE_NAMECPACK_NUGET_PACKAGE_LICENSE_EXPRESSION 将被忽略。

强制:

默认:

CPACK_NUGET_PACKAGE_ICONURL
CPACK_NUGET_<compName>_PACKAGE_ICONURL

从版本 3.20 起弃用:改用本地图标文件 (CPACK_NUGET_PACKAGE_ICON)。

用于在 UI 界面显示软件包图标的 64x64 透明背景图像的 URL。

强制:

默认:

CPACK_NUGET_PACKAGE_ICON
CPACK_NUGET_<compName>_PACKAGE_ICON

在版本 3.20 中添加。

一个拥有透明背景的 64x64 像素图像的文件名,用作 UI 显示中包的图标。

强制:

默认:

支持:

NuGet 5.3.0 及以上版本

CPACK_NUGET_PACKAGE_README
CPACK_NUGET_<compName>_PACKAGE_README

在版本 3.30 中新增。

包路径相对于包根目录到自述文件。受支持的文件格式仅包括 Markdown (*.md)。

强制:

默认:

支持:

NuGet 5.10.0 预览版 2 及更高版本

CPACK_NUGET_PACKAGE_REQUIRE_LICENSE_ACCEPTANCE

如果将其设置为 true 值,则在安装包之前会提示用户接受许可。

强制:

默认:

CPACK_NUGET_PACKAGE_DESCRIPTION_SUMMARY
CPACK_NUGET_<compName>_PACKAGE_DESCRIPTION_SUMMARY

自版本 3.30 起弃用: 摘要已弃用。改用描述 (CPACK_NUGET_PACKAGE_DESCRIPTION)。

包的简短描述,用于 UI 显示。如果省略,将使用摘要的截断版本。

强制:

默认:

CPACK_PACKAGE_DESCRIPTION_SUMMARY

CPACK_NUGET_PACKAGE_RELEASE_NOTES
CPACK_NUGET_<compName>_PACKAGE_RELEASE_NOTES

本包版本的更改描述,通常在 Visual Studio 包管理器更新标签这样的 UI 中使用,而不使用包描述。

强制:

默认:

包的版权详细信息。

强制:

默认:

CPACK_NUGET_PACKAGE_LANGUAGE
CPACK_NUGET_<compName>_PACKAGE_LANGUAGE

在版本 3.20 中添加。

包的区域设置说明符,例如 en_CA

强制:

默认:

CPACK_NUGET_PACKAGE_TAGS
CPACK_NUGET_<compName>_PACKAGE_TAGS

一个以空格分隔的标记和关键字列表,用于描述该包并通过搜索和筛选来帮助发现包。

强制:

默认:

CPACK_NUGET_PACKAGE_REPOSITORY_URL
CPACK_NUGET_<compName>_REPOSITORY_URL

在版本 3.30 中新增。

存储库元数据使您可以将 *.nupkg 映射到生成它的存储库。这应该是一个可以由版本控制软件直接调用的公共可用 URL。这不得是 HTML 页面,因为该页面是为计算机准备的。

强制:

默认:

支持:

NuGet 4.0 及更高版本

CPACK_NUGET_PACKAGE_REPOSITORY_TYPE
CPACK_NUGET_<compName>_REPOSITORY_TYPE

在版本 3.30 中新增。

VCS 存储库的类型。将包上传到 nuget.org 时,该类型的字符数限制为 100。

强制:

是的,如果已指定存储库 URL

默认:

支持:

NuGet 4.0 及更高版本

CPACK_NUGET_PACKAGE_REPOSITORY_BRANCH
CPACK_NUGET_<compName>_REPOSITORY_BRANCH

在版本 3.30 中新增。

用于生成包的 VSC 分支名称。

强制:

默认:

支持:

NuGet 4.6 及更高版本

CPACK_NUGET_PACKAGE_REPOSITORY_COMMIT
CPACK_NUGET_<compName>_REPOSITORY_COMMIT

在版本 3.30 中新增。

用于生成包的提交的 SHA-1 哈希。

强制:

默认:

支持:

NuGet 4.6 及更高版本

CPACK_NUGET_PACKAGE_TITLE
CPACK_NUGET_<compName>_PACKAGE_TITLE

包的人性化标题,通常用作 UI 显示,如 nuget.org 和 Visual Studio 中的包管理器。如果没有指定,则使用包 ID。

强制:

默认:

依赖项规范

CPACK_NUGET_PACKAGE_DEPENDENCIES
CPACK_NUGET_<compName>_PACKAGE_DEPENDENCIES

默认(非特定于框架)包依赖项的列表。

强制:

默认:

CPACK_NUGET_PACKAGE_DEPENDENCIES_<dependency>_VERSION
CPACK_NUGET_<compName>_PACKAGE_DEPENDENCIES_<dependency>_VERSION

针对特定依赖项的版本规范,其中 <dependency> 是依赖项列表中的一个项目(见上文)。

强制:

默认:

CPACK_NUGET_PACKAGE_TFMS
CPACK_NUGET_<compName>_PACKAGE_TFMS

在版本 3.30 中新增。

一组目标框架单字(TFM),用于这个程序包,例如:“net47;netcoreapp21”。对于每个 TFM 在 NuGet 程序包的依赖关系块中,将生成一个依赖关系组。可以通过 TFM 依赖关系列表(见下文)向这些组添加特定于框架的依赖关系。

此变量尤其适用于修复警告NU5128

强制:

默认:

CPACK_NUGET_PACKAGE_DEPENDENCIES_<tfm>
CPACK_NUGET_<compName>_PACKAGE_DEPENDENCIES_<tfm>

在版本 3.30 中新增。

具体适用于<tfm>框架的一组程序包依赖关系,其中<tfm>是 TFM 列表中的一个项目(见上文)。

强制:

默认:

CPACK_NUGET_PACKAGE_DEPENDENCIES_<tfm>_<dependency>_VERSION
CPACK_NUGET_<compName>_PACKAGE_DEPENDENCIES_<tfm>_<dependency>_VERSION

在版本 3.30 中新增。

特定于框架的依赖关系的版本规范,其中<dependency><tfm>特定依赖关系列表的项目(见上文)。

强制:

默认:

示例用法

set(CPACK_GENERATOR NuGet)
# Set up package metadata
set(CPACK_PACKAGE_NAME SamplePackage)
set(CPACK_PACKAGE_VERSION "1.0.0")
set(CPACK_PACKAGE_VENDOR "Example Inc")
set(CPACK_NUGET_PACKAGE_AUTHORS "ExampleInc")
set(CPACK_PACKAGE_DESCRIPTION "A .NET wrapper around the foobar library for frobbling bratchens")
set(CPACK_PACKAGE_HOMEPAGE_URL "https://www.example.com")
set(CPACK_NUGET_PACKAGE_REPOSITORY_URL "https://github.com/example/libfoobar.git")
set(CPACK_NUGET_PACKAGE_REPOSITORY_TYPE git)
set(CPACK_NUGET_PACKAGE_LICENSE_EXPRESSION "MIT")
# Set up dependencies
set(CPACK_NUGET_PACKAGE_TFMS "net4;net6.0")
set(CPACK_NUGET_PACKAGE_DEPENDENCIES_net4 "Foo;Bar")
# NB: If a version number is omitted, the dependency will not be created
set(CPACK_NUGET_PACKAGE_DEPENDENCIES_net4_Foo_VERSION "1.23")
set(CPACK_NUGET_PACKAGE_DEPENDENCIES_net4_Bar_VERSION "4.3.2")
# NB: General dependencies (not framework-specific) go in this variable
set(CPACK_NUGET_PACKAGE_DEPENDENCIES "Baz")
set(CPACK_NUGET_PACKAGE_DEPENDENCIES_Baz_VERSION "9.8.6")
# NB: Since "net6.0" was listed but no dependencies have been specified, an empty group
# will be added to the nuspec file for this framework. This can be used to address warning NU5128.

include(CPack)