Artifactory NuGet 安装没有获取最新的包版本

Artifactory NuGet install not getting latest package version

我在从自托管 Artifactory 安装 NuGet 包时遇到问题。当包 ID 超过三十个唯一版本时,NuGet 安装命令将无法识别最新版本。检查 NuGet 安装命令的日志,我可以看到它发出了两个 Web 请求。

GET https://artifactory.local/artifactory/api/nuget/<repository>/FindPackagesById()?id='<package ID>'
OK https://artifactory.local/artifactory/api/nuget/<repository>/FindPackagesById()?id='<package ID>' 815ms
GET https://artifactory.local/artifactory/api/nuget/<repository>/FindPackagesById()?$skip=80&id='<package ID>'
OK https://artifactory.local/artifactory/api/nuget/<repository>/FindPackagesById()?$skip=80&id='<package ID>' 209 ms

当我 运行 这些命令时,我得到一个 XML 提要响应,分别包含三十个和零个条目。如果我将第二个请求中的“$skip”参数调整为 30,我会看到我最近的包裹。

Artifactory 是否未返回 80 个条目而错误地实现了 NuGet API FindPackagesById 方法?

规格

本地和虚拟 Nuget 存储库的当前实施要求每页最多 80 个结果。第一个 OData 提要响应(对于其中没有 $skip 参数的第一个请求)应该能够 return 80 个条目,前提是包至少有 80 个版本。

当单个包(相同的包 ID)包含在多个不同的存储库中,并且当通过聚合这些存储库的虚拟存储库发送请求时,Artifactory 当前存在并且我们知道的问题会发生。如果单个包有超过 80 个版本,Artifactory return 会在第一个响应中使用 $skip=80 进行分页 link。问题在于 Artifactory(错误地)假设某个包 ID 仅存在于虚拟仓库下的一个仓库中,因此将 $skip=n 一个一个地发送到所有聚合仓库,因此 skip=1 实际上跳过了两个实体, skip=2 实际上跳过了 4,而 skip=n 本质上变成了 skip=2n。此错误已在此处报告,将在未来几个月内修复:

https://www.jfrog.com/jira/browse/RTFACT-12379

如果这听起来不像你的问题,请分享你尝试安装的包有多少个版本,你是否使用虚拟存储库,以及相同的包是否存在于多个版本中相应虚拟仓库下的仓库。

在修复 RTFACT-12379 之前,当前(不太理想)的解决方法是不使用虚拟存储库来安装超过 80 个版本的包,或者确保某个包不存在于不止一个仓库。