Artifactory NuGet安装没有获得最新的软件包版本

时间:2016-11-08 02:43:56

标签: nuget artifactory

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

for(int x = limit; x > 10; x--){
    if(x! = 44 && x != 22){
        System.out.print(x + " ");
    }
}

当我运行这些命令时,我得到一个XML feed响应,分别有30个和0个条目。如果我调整了' $ skip'第二个请求参数为三十我看到我最近的包。

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

功能

  • Artifactory version 4.12.01
  • NuGet命令行版本3.4.4.1321

1 个答案:

答案 0 :(得分:3)

使用Local和Virtual Nuget存储库的当前实现要求每页最多80个结果。第一个OData feed响应(对于没有$ skip param的第一个请求)应该能够返回80个条目,前提是该软件包至少有80个版本。

Artifactory当前拥有并且我们知道的问题发生在多个不同存储库中包含单个包(相同包ID)时,以及通过聚合这些存储库的虚拟存储库发送请求时。如果单个包具有超过80个版本,Artifactory会在第一个响应中返回带有$ skip = 80的分页链接。问题是Artifactory(错误地)假定某个包ID只存在于虚拟仓库下的一个存储库中,因此将$ skip = n逐个发送到所有聚合的repos,所以skip = 1实际上跳过了两个实体, skip = 2实际上跳过4,而skip = n基本上变为skip = 2n。此错误在此处报告,将在未来几个月内修复:

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

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

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