2011-01-14 4 views
15

В моем рабочем месте у нас есть темпераментный прокси-сервер, который часто делает окно пакетов nuget непригодным (то же самое верно для командной строки nuget). Я начал копировать пакеты, которые мы чаще всего используем для локального зеркала на сетевом ресурсе, но делать это вручную стало утомительно. Я экспериментировал с использованием powershell, чтобы автоматически загружать пакеты, но, похоже, не может заставить urad odata отображать больше, чем несколько пакетов. Например, выполнив следующий запрос:Зеркалирование официального репозитория пакетов nuget

$feed = [xml]$webClient.DownloadString("http://feed.nuget.org/ctp2/odata/v1/Packages?$filter=startswith(Title,'O') eq true&$top=100") 

должен вернуть 100 лучших пакетов, которые имеют название, начинающееся с «O», но никакие пакеты не будут возвращены. Как ни странно, это прекрасно работает с именами пакетов, которые находятся в списке пакетов по умолчанию, который был получен путем нажатия http://feed.nuget.org/ctp2/odata/v1/Packages. Я угадываю, что происходит какой-то пейджинг, где я только просматриваю первую страницу. Игра с параметрами, которые я, кажется, не могу изменить на следующую страницу ...

Кто-нибудь еще пытался это сделать? Кто-нибудь еще заметил таймауты/неудачные запросы с использованием nuget?

ответ

9

Jon Galloway разместил скрипт PS, который загружает весь репозиторий. Я использовал его на нескольких машинах, и он отлично работает для меня.

http://weblogs.asp.net/jongalloway/downloading-a-local-nuget-repository-with-powershell

+0

Это был отличный ответ. Я использовал сценарий ps. Позже я использовал Nuget.Downloader. Но сегодня я нашел, оба они не работают ... Итак, сэр; есть ли у вас обновленный ответ на этот вопрос? –

2

Вам нужно быть осторожным при использовании строки в двойных кавычках. Попробуйте сначала вычислить URL-адрес, либо его часть:

PS> "?$filter=startswith(Title,'O') eq true&$top=100" 
?=startswith(Title,'O') eq true&=100 

PS> "?`$filter=startswith(Title,'O') eq true&`$top=100" 
?$filter=startswith(Title,'O') eq true&$top=100 

Побег над значком доллара с возвратом.

Затем я попытался запросить сайт с помощью (надеюсь) правильного URL-адреса, но результат не был возвращен. Так что - до сих пор не повезло, и в сервисе может быть что-то не так.

3

Мое предложение заключается в использовании New-ODataServiceProxy или даже Doug Финке-х PSOdata project

С только функции прокси вы можете сделать это:

New-ODataServiceProxy http://packages.nuget.org/v1/FeedService.svc/ NuGet 
# Chain up calls to AddQueryOption (please excuse my line wrapping): 
$NuGet.Packages.AddQueryOption('$filter',"startswith(Title,'O') eq true" 
      ).AddQueryOption('$top','3') | 
Format-Table Id, Version, Authors, Description -Wrap -Auto