簡體   English   中英

.NET Core 如何以編程方式檢索具有相同所有者的所有 nuget 包元數據?

[英].NET Core how to retrieve programmatically all nuget packages metadata with same owner?

使用 .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 包?

是否可以使用任何官方提供的與 nuget API 通信的 nuget 包?

不是真的,不是。

NuGet 客戶端團隊將他們在 nuget.org 上發布的包稱為NuGet (Client) SDK NuGet.Protocol 是實現 NuGet服務器 HTTP API客戶端的包。 NuGet SDK 沒有實現所有的服務器 API,只是在 Visual Studio 中使用的部分。

由於您的問題是關於搜索, 搜索文檔是相關的。 查看響應架構,我們可以看到owners是字段之一,但查看請求參數,沒有專門詢問所有者的查詢。

因此,您可以嘗試將您感興趣的 nuget.org 帳戶名稱作為搜索關鍵字傳遞,並希望搜索索引包含該信息。 當您返回結果時,您可以檢查每個包裹並忽略那些沒有您正在尋找的包裹所有者帳戶的包裹。

具有包元數據的另外兩個服務器 API 資源是目錄(由攝取管道處理的所有包的事務日志)和包元數據,但都不顯示所有者信息。

但是,NuGet 服務器團隊的問題跟蹤器是 GitHub 的 NuGet/NuGetGallary 存儲庫,我發現了一個問題,詢問如何在 nuget.org 上獲取給定包的所有者列表 他們承認這是協議的一個缺點。 您可以對該問題進行投票以表明它很重要(到目前為止只有 1 個投票,因此對於大多數客戶來說這似乎並不重要)。 但他們也回復了一個非官方的、未記錄的 URL,其中包含所有包的所有者列表。 您可以使用它,但顯然要考慮理論上它可以隨時更改的風險。 話雖如此,該評論是 2 年前發布的,它仍然有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM