2014-10-24 18 views
8

Tôi hiện đang đóng gói một số tệp và đẩy chúng vào nguồn cấp dữ liệu NuGet trên một trong các máy chủ của chúng tôi bằng công cụ dòng lệnh. Thay vì sử dụng công cụ dòng lệnh, tôi đã thiết lập một dự án bằng Nuget.Core và quản lý thành công để tạo một gói. Tôi đang cố gắng đẩy gói đó từ máy tính của tôi vào nguồn cấp dữ liệu NuGet thông qua NuGet.Core. Sử dụng công cụ dòng lệnh mà trông như thế này (và tôi đã làm việc này quá):Đẩy gói NuGet lập trình bằng NuGet.Core

nuget.exe push package.nupkg -ApiKey MYAPIKEY -Source http://nugetpackagefeedaddress 

Những gì tôi muốn làm là tái tạo chức năng đẩy sử dụng NuGet.Core. Gần nhất tôi đã quản lý để có được cho đến nay là nhận được hai kho từ PackageRepositoryFactory, một cho đường dẫn máy địa phương và một cho nguồn cấp dữ liệu gói và sau đó lấy gói từ một địa phương và thử và thêm nó vào nguồn cấp dữ liệu như thế này:

var remoteRepo = PackageRepositoryFactory.Default.CreateRepository("myNugetPackagefeedUrl"); 
var localRepo = PackageRepositoryFactory.Default.CreateRepository(@"locationOfLocalPackage"); 
var package = localRepo.FindPackagesById("packageId").First(); 
remoteRepo.AddPackage(package); 

mã này kết quả trong một NotSupportedException nêu rõ 'phương pháp chỉ định không được hỗ trợ'

có thể đẩy gói sử dụng NuGet.Core? và tôi có ở gần nó với mã ở trên không?

Lưu ý: Tôi biết rằng tôi có thể kết thúc cuộc gọi tới nuget.exe và gọi từ .NET nhưng tôi muốn gửi và chuyển từ NuGet.Core hoặc thực hiện cả hai bằng cách gói các cuộc gọi đến nuget.exe thay vì một nửa và một nửa

Trả lời

9

Vì vậy, hóa ra tôi đã tìm kiếm hoàn toàn sai địa điểm. Phương pháp gì tôi muốn là PushPackage trên PackageServer

Mã bây giờ trông như thế này

var localRepo = PackageRepositoryFactory.Default.CreateRepository(@"locationOfLocalPackage"); 
var package = localRepo.FindPackagesById("packageId").First(); 
var packageFile = new FileInfo(@"packagePath"); 
var size = packageFile .Length; 
var ps = new PackageServer("http://nugetpackagefeedaddress", "userAgent"); 
ps.PushPackage("MYAPIKEY", package, size, 1800, false); 

Tôi không chắc chắn những gì các giá trị tốt nhất cho tham số UserAgent khi newing lên PackageServer sẽ. Tương tự như vậy nếu có ai có lời khuyên nào về những gì các thông số thời gian chờ hoặc disableBuffering muốn trở thành, cho tôi biết (ví dụ là thời gian chờ tính bằng ms, giây, vv)

Phương pháp chữ ký PushPackage trông như thế này:

void PackageServer.PushPackage(string apiKey, IPackage package, long packageSize, int timeout, bool disableBuffering) 
1

Ngoài câu trả lời của rh072005:

  • Hết thời gian bằng mili giây, hãy cẩn thận.
  • Uri là khó khăn. Đối với NuGet.Server thực hiện PushPackage uri nên "http://nugetserveraddress" trong khi đối với các đối tượng IPackageRepository Uri trở thành "http://nugetserveraddress/nuget"
  • Đối với các gói lớn bạn sẽ nhận được (404) Not Found nếu máy chủ IIS không được cấu hình để chấp nhận yêu cầu lớn.
Các vấn đề liên quan