2014-10-24 2 views
8

В настоящее время я собираю некоторые файлы и нажимаю их на канал NuGet на одном из наших серверов, используя инструмент командной строки. Вместо того, чтобы использовать инструмент командной строки, я настроил проект с помощью Nuget.Core и успешно смог создать пакет. Теперь я пытаюсь вытащить этот пакет с моей машины на канал NuGet через NuGet.Core. Используя инструмент командной строки, которая выглядит следующим образом (и я получил эту работу тоже):Пакет Push NuGet программно с использованием NuGet.Core

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

То, что я хочу сделать, это повторить функцию нажимной с помощью NuGet.Core. Ближе всего мне удалось получить до сих пор два репозитория из PackageRepositoryFactory, один для локального машинного пути и один для фида пакета, а затем извлечение пакета из локального и попытаться добавить его в фид следующим образом:

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

Этот код приводит к NotSupportedException с указанием «Указанный метод не поддерживается»

можно ли выдвинуть пакеты с помощью NuGet.Core? и я где-нибудь рядом с ним с вышеуказанным кодом?

Примечание: Я знаю, что я мог бы обернуть вызов nuget.exe и вызвать это из .NET, но я либо захочу упаковать и нажать из NuGet.Core, либо сделать оба путем переноса вызовов на nuget.exe а не половина и половина

ответ

9

Так получилось, что я искал не то место целиком. Метод, который я хотел PushPackage на PackageServer

код теперь выглядит следующим образом

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

Я не уверен, что лучшие значения параметра UserAgent при newing вверх PackageServer будет. Точно так же, если у кого есть какие-либо рекомендации о том, какие параметры тайм-аута или disableBuffering хотите быть, дайте мне знать (например, это время ожидания в миллисекундах, секундах и т.д.)

Метод подписи PushPackage выглядит следующим образом:

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

в дополнение к ответу rh072005 в:

  • тайм-аут в миллисекундах, будьте осторожны.
  • Ури сложно. Для NuGet.Server PushPackage реализации URI должен быть «http://nugetserveraddress» в то время как для объектов IPackageRepository Uri становится «http://nugetserveraddress/nuget»
  • Для больших пакетов, которые вы получите (404) не найден, если сервер IIS не настроен принимать большие запросы.
Смежные вопросы