我想知道在下载之前是否有办法知道包的大小。我正在使用nuget包来部署组件,知道更新的大小将是一个很好的功能。
答案 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中的百分比进度。