我正在开发工具,我需要以编程方式识别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();
}
答案 0 :(得分:1)
“元数据包”更像是构建nuget包的约定而不是包上的实际“类型”/“属性”。 如果NuGet包不包含任何资产(库,内容资产,工具,构建逻辑等) - 实际上是空的 - 但只依赖于其他包,它被称为“metapackage”。测试包是否符合此定义的唯一方法是下载并检查其资产。