如何使用nuget.core获取包大小?

时间:2014-12-27 00:15:52

标签: nuget

我想知道在下载之前是否有办法知道包的大小。我正在使用nuget包来部署组件,知道更新的大小将是一个很好的功能。

1 个答案:

答案 0 :(得分:0)

NuGet gallery package source

的响应中返回包大小
 <d:PackageSize m:type="Edm.Int64">223865</d:PackageSize>

不幸的是,从NuGet.Core.dll返回的Package对象中无法使用此PackageSize。

要获得PackageSize的一种方法是从NuGet的源代码中获取DataServicePackageRepository类和DataServicePackage类并修改它们,以便在DataServicePackage对象上提供PackageSize属性。

public long PackageSize { get; set; }

我把这两个类重命名为CustomDataServicePackageRepository和CustomDataServicePackage。

您可以在应用程序中包含这两个类,并通过将返回的IPackage转换为自定义DataServicePackage类来使用它们,然后访问PackageSize属性。

    var repo = new CustomDataServicePackageRepository(new Uri("https://www.nuget.org/api/v2/"));
    var packages = repo.Search(null, false)
        .Where(package => package.IsLatestVersion)
        .OrderByDescending(package => package.DownloadCount)
        .AsBufferedEnumerable(30)
        .Where(package => package.IsReleaseVersion())
        .Take(10);

    foreach (IPackage package in packages) {
        var dataServicePackage = package as CustomDataServicePackage;
        long size = dataServicePackage == null ? -1 : dataServicePackage.PackageSize;
        Console.WriteLine("Package: {0}, Size: {1}", package.ToString(), size);
    }

NuGet本身不使用PackageSize。相反,它开始下载NuGet包,并查看HTTP响应中返回的ContentLength,以查找NuGet包的大小。然后,这将用于显示Visual Studio中的百分比进度。