2014-12-27 2 views

답변

0

패키지 크기는 다시 NuGet gallery package source의 응답에 반환됩니다

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

불행하게도이 PackageSize가 다시 NuGet.Core.dll에서 얻을 패키지 개체에서 사용할 수 없습니다.

PackageSize를 얻는 한 가지 방법은 NuGet의 소스 코드에서 DataServicePackageRepository 클래스와 DataServicePackage 클래스를 가져 와서 DataServicePackage 개체에서 PackageSize 속성을 사용할 수 있도록 수정하는 것입니다.

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

관련 문제