.NET Core 如何以编程方式检索具有相同所有者的所有 nuget 包元数据?
Posted
技术标签:
【中文标题】.NET Core 如何以编程方式检索具有相同所有者的所有 nuget 包元数据?【英文标题】:.NET Core how to retrieve programmatically all nuget packages metadata with same owner? 【发布时间】:2021-01-05 02:40:11 【问题描述】:使用 .NET Core/Standard (C#) 我想检索特定所有者的所有 nuget 包的详细信息。
例如,提供“charliepoole”会给我所有相关的包,如页面上的:https://www.nuget.org/profiles/charliepoole
我目前正在使用包 NuGet.ProjectModel
按 ID/版本检索单个包,但似乎没有任何其他相关方法可以帮助我。
作为参考,这是我按 ID 和版本检索单个包的方式:
public async Task<IPackageSearchMetadata> GetPackageAsync(string id, string version, CancellationToken cancellationToken = default)
var packageSource = new PackageSource("https://api.nuget.org/v3/index.json", "NugetV3");
var providers = new List<Lazy<INuGetResourceProvider>>();
providers.AddRange(Repository.Provider.GetCoreV3());
var repo = new SourceRepository(packageSource, providers);
var packageMetadataResource = await repo.GetResourceAsync<PackageMetadataResource>(cancellationToken);
var packageIdentity = new PackageIdentity(id, NuGetVersion.Parse(version));
var context = new SourceCacheContext
NoCache = true,
DirectDownload = true
;
return await packageMetadataResource
.GetMetadataAsync(packageIdentity, context, new NullLogger(), cancellationToken);
这是否可以使用任何官方提供的与 nuget API 对话的 nuget 包?
【问题讨论】:
【参考方案1】:这是否可以使用任何官方提供的与 nuget API 对话的 nuget 包?
不是真的,不。
NuGet 客户端团队将他们在 nuget.org 上发布的包称为NuGet (Client) SDK。 NuGet.Protocol 是实现 NuGet 的server HTTP API 客户端的包。 NuGet SDK 没有实现所有的服务器 API,只是 Visual Studio 中使用的部分。
由于您的问题是关于搜索的,因此search docs 是相关的。查看response schema,我们可以看到owners
是字段之一,但查看request parameters,没有查询可以专门询问所有者。
因此,您可以尝试将您感兴趣的 nuget.org 帐户名称作为搜索关键字传递,并希望搜索索引具有该信息。当您获得结果后,您可以检查每个包并忽略没有您正在寻找的包所有者帐户的包。
另外两个具有包元数据的服务器 API 资源是 catalog(摄取管道处理的所有包的事务日志)和 package metadata,但都不显示所有者信息。
但是,NuGet 服务器团队的问题跟踪器是 GitHub 的 NuGet/NuGetGallary 存储库,我发现一个问题询问 how to get the list of owners of a given package on nuget.org。他们承认这是协议的一个缺点。您可以对该问题进行投票以表明它很重要(到目前为止只有 1 个投票,所以这对大多数客户来说似乎并不重要)。但他们也回复了一个非官方的、未记录的 URL,其中包含所有包的所有者列表。您可以使用它,但显然要考虑它理论上随时可能发生变化的风险。话虽如此,该评论是 2 年前发布的,现在仍然有效。
【讨论】:
我也实现了搜索,我注意到他们似乎正在索引作者。我还注意到,在检索(搜索或获取单个包)时,元数据从未为 Owners 字段设置任何内容。它似乎总是为空。你知道这是什么原因吗?以上是关于.NET Core 如何以编程方式检索具有相同所有者的所有 nuget 包元数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式检索 EPi Server 网站的所有启用语言的列表?
如何以编程方式从照片应用程序中检索所有照片/视频并将其复制到我的应用程序?