nuget - Artifactory NuGet 安装未获取最新的软件包版本

标签 nuget artifactory

我在从自托管 Artifactory 安装 NuGet 包时遇到问题。当包 ID 超过 30 个唯一版本时,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 提要响应,分别包含 30 个和 0 个条目。如果我将第二个请求中的“$skip”参数调整为 30,我会看到我最近的软件包。

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

规范

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

最佳答案

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

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

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

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

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

关于nuget - Artifactory NuGet 安装未获取最新的软件包版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40478101/

相关文章:

nuget - 无法安装软件包 '--'。您正在尝试将此软件包安装到针对 '.NETFramework,Version=v4.5'的项目中

jenkins - 如何知道 Jenkins 的 Jfrog Artifactory 中是否已存在 Artifactory

eclipse - java.lang.NoClassDefFoundError maven + eclipse

rest - 在 2.6.1(非专业版)中使用 Artifactory REST API 和curl

c# - 在 nuget 包中包含引用的项目 DLL [.Net Core RC3 *.csproj 文件]

c# - 我的 .NET Core 3.1 应用程序可以移植到 .NET 5 吗?

.net - 包管理器控制台不工作

azure-devops - "dotnet restore --interactive"不适用于 Azure Artifacts

jenkins - Artifactory 的 Debian 存储库插件?

java - IntelliJ/Maven 不更新来自 Artifactory 的 Artifact