如何识别Nuget元数据包?

时间:2017-08-20 14:05:58

标签: c# nuget

我正在开发工具,我需要以编程方式识别Nuget包,它作为PackageReference添加到我当前的项目中是一个元数据包或常规包。由于Nuget V3 API没有足够的文档,因此很难获得这些细节。对此方面的任何指示都表示赞赏。

我尝试了以下代码和方法GetMetadataAsync返回NuGet.Protocol.PackageSearchMetadata类型的集合,但是此类型上没有任何属性表示包是元数据包。

private async void button1_Click(object sender, EventArgs e)
    {
        ILogger log = new Logger();
        List<Lazy<NuGet.Protocol.Core.Types.INuGetResourceProvider>> providers = new List<Lazy<NuGet.Protocol.Core.Types.INuGetResourceProvider>>();
        providers.AddRange(Repository.Provider.GetCoreV3()); 
        PackageSource packageSource = new PackageSource("https://api.nuget.org/v3/index.json");
        SourceRepository sourceRepository = new SourceRepository(packageSource, providers);
        PackageMetadataResource packageMetadataResource = await sourceRepository.GetResourceAsync<PackageMetadataResource>();
        IEnumerable<IPackageSearchMetadata> searchMetadata = await packageMetadataResource.GetMetadataAsync("Microsoft.AspNetCore.All", true, true,log, CancellationToken.None);
        var list = searchMetadata.ToList();

    }

1 个答案:

答案 0 :(得分:1)

“元数据包”更像是构建nuget包的约定而不是包上的实际“类型”/“属性”。 如果NuGet包不包含任何资产(库,内容资产,工具,构建逻辑等) - 实际上是空的 - 但只依赖于其他包,它被称为“metapackage”。测试包是否符合此定义的唯一方法是下载并检查其资产。