2014-10-24 3 views
8

Ich verpacken derzeit einige Dateien und schieben sie auf eine NuGet-Feed auf einem unserer Server mithilfe der Befehlszeile-Tool. Anstatt das Befehlszeilentool zu verwenden, habe ich ein Projekt mit Nuget.Core eingerichtet und erfolgreich ein Paket erstellt. Ich versuche nun, das Paket von meinem Rechner über NuGet.Core auf den NuGet-Feed zu übertragen. Mit dem Kommandozeilen-Tool, das wie folgt aussieht (und ich habe diese Arbeit auch):Push NuGet-Paket programmgesteuert mit NuGet.Core

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

Was ich will ist die Push-Funktion tun replizieren NuGet.Core verwenden. Der nächste, den ich bisher erreicht habe, ist, zwei Repositories von PackageRepositoryFactory zu bekommen, einen für den lokalen Rechnerpfad und einen für den Paket-Feed und dann das Paket von dem lokalen zu holen und es so zum Feed hinzuzufügen:

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

Dieser Code führt zu einem NotSupportedException die Angabe ‚angegebene Methode wird nicht unterstützt‘

ist es möglich, Pakete mit NuGet.Core zu schieben? Und bin ich mit dem obigen Code irgendwo in der Nähe?

Hinweis: Ich bin mir bewusst, dass ich den Aufruf von nuget.exe umbrechen und das von .NET aufrufen könnte, aber entweder von NuGet.Core verpacken und pushen möchte oder beides durch Einwickeln der Aufrufe von nuget.exe tun eher als halb und halb

Antwort

9

So stellt sich heraus, dass ich völlig falsch am Ort suchte. Die Methode, die ich wollte, war PushPackage auf PackageServer

Der Code sieht nun wie folgt

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); 

Ich bin nicht sicher, was die besten Werte für den Useragent Parameter, wenn newing die PackageServer würde sein. Ebenso, wenn jemand einen Rat hat auf das, was die Zeitüberschreitung oder disableBuffering Parameter sein wollen, lassen Sie mich wissen (zum Beispiel ist das Timeout in ms, Sekunden usw.)

Die PushPackage Methodensignatur sieht wie folgt aus:

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

Neben rh072005 Antwort:

  • Timeout in Millisekunden ist, vorsichtig sein.
  • Uri ist schwierig. Für NuGet.Server Implementierung PushPackage sollte uri „http://nugetserveraddress“ sein, während für IPackageRepository Objekte Uri „http://nugetserveraddress/nuget
  • für große Pakete wird, werden Sie (404) nicht gefunden wenn IIS-Server nicht so konfiguriert ist, zu akzeptieren, große Anfragen bekommen.