2014-12-27 87 views

回答

0

封裝尺寸返回的響應從NuGet gallery package source回:

<d:PackageSize m:type="Edm.Int64">223865</d:PackageSize> 

不幸的包裝尺寸是不能從包對象你從NuGet.Core.dll回來。

獲取PackageSize的一種方法是從NuGet的源代碼中獲取DataServicePackageRepository類和DataServicePackage類並對其進行修改,以便PackageSize屬性在DataServicePackage對象上可用。

public long PackageSize { get; set; } 

我拿了這兩個類,並將它們重命名爲CustomDataServicePackageRepository和CustomDataServicePackage。

您可以將這兩個類包含在您的應用程序中,並通過將返回到您的自定義DataServicePackage類的IPackage強制轉換並訪問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中的百分比進度。

+0

太好了,謝謝 –

+0

爲什麼nuget不提供默認的信息。我不相信我們應該編寫一些東西來獲得頁面的大小。 – batmaci