NuGet是否存在官方整合包名与版本的单字符串包标识符?
NuGet 官方单字符串包标识规范
NuGet 官方有全工具链统一支持的单字符串包标识标准格式:{PackageId}/{Version},用正斜杠分隔包ID(即常说的包名)与版本号。
普通开发者查阅的公开文档大多把包ID、版本作为两个独立参数讲解,所以很少单独提及这个单字符串格式,但它是NuGet官方API、CLI工具、本地存储逻辑统一遵循的公开约定,不是内部私有实现。
格式规则
- 包ID部分遵循NuGet通用规则:大小写不敏感,支持
.、-、_、@等合法字符,匹配校验时不区分大小写 - 版本号部分支持所有合法NuGet版本格式,覆盖SemVer 2.0正式版、预发布后缀、构建元数据等写法
- 合法示例:
Newtonsoft.Json/13.0.3Microsoft.Extensions.DependencyInjection/8.0.0NLog/5.3.0-beta.2
常见使用场景
这个格式在NuGet生态内应用非常普遍:
- NuGet V3服务API的包元数据查询、包内容下载请求路径,均使用该格式拼接包标识
- 本地全局NuGet包缓存的目录结构,严格按照
包ID/版本号/的层级存储解压后的包文件 dotnet nuget why、nuget.exe list -allversions等官方CLI命令的默认输出,都采用该格式展示包的完整身份信息
非官方格式说明
NuGet官方目前没有适配其他包管理生态常用的分隔符写法:
- 不支持npm风格的
@分隔:@本身是NuGet包ID的合法字符,用它做分隔符会产生解析歧义 - 不支持pip风格的
==、Maven风格的:分隔:这类写法仅在部分第三方依赖管理工具中做了兼容适配,不属于官方规范,无法保证在所有官方工具、API链路中正常解析。
内容的提问来源于stack exchange,提问作者Jonathan T
相关产品推荐
相关产品推荐

