Как настроить, где строка командной строки NuGet.exe ищет пакеты - PullRequest
5 голосов
/ 22 сентября 2011

Мы успешно настроили несколько локальных репозиториев пакетов с помощью пакета NuGet.Server и разместили их на локальном веб-сервере IIS.Мы можем подключиться из диспетчера пакетов и установить без проблем.Таким образом, они работают нормально.

Чтобы нам не приходилось проверять папку наших пакетов, мы включили следующую командную строку в каждый файл проекта, который содержит ссылки на NuGet.Это работает, если NuGet.exe находится в пути агента сборки CI.

Однако я бы хотел переместить исходную конфигурацию из командной строки в каждый файл проекта и поместить ее в одно место, желательно там, где другие надоедливые разработчики не могут его изменить;)

<Target Name="BeforeBuild">
    <Exec Command="nuget install $(ProjectDir)packages.config -s 
       http://domain:80/DataServices/Packages.svc/;
        http://domain:81/DataServices/Packages.svc/ 
       -o $(SolutionDir)packages" />
</Target>

Есть ли лучший способ?

Ответы [ 2 ]

13 голосов
/ 22 сентября 2011

Да, есть ;-) Взгляните на NuGetPowerTools .После запуска Install-Package NuGetPowerTools он добавляет в ваш $ (SolutionDir) папку .nuget, содержащую nuget.exe, цели и настройки nuget msbuild (которые вам необходимо проверить).

После этого вы простозапустите Enable-PackageRestore, и он установит цели msbuild в файлы проекта visual studio, которые обеспечат выборку пакетов на этапе предварительной сборки, даже на вашем сервере сборки, без проверки каких-либо пакетов.(не забудьте проверить в папке .nuget!).

Таким образом, вы просто управляете источниками пакетов nuget в файле настроек nuget msbuild (в папке .nuget), который является центральным для вашего решения,а не в каждом проекте.

Ура, Ксавье

5 голосов
/ 28 сентября 2011

Я наконец-то получил NuGetPowerTools для установки после совета от digitaltrust по http://blog.davidebbo.com

Хотя NuGetPowerTools решил мою проблему, это было излишним для того, что я хотел.Это требует, чтобы вы зарегистрировали для контроля версий папку .nuget, которую она создает в корне вашего решения.Папка содержит NuGet.exe и несколько целевых файлов.Мне это не нравится, так как я считаю, что контроль версий предназначен для исходного кода, а не для инструментов.

Я пришел к следующему решению:

  1. Сохраните NuGet.exe в папку на локальном диске, как на dev, так и на машинах непрерывной интеграции.Я выбрал C: \ tools \ nuget \
  2. Добавить этот путь к переменной среды Path во всех средах
  3. На компьютерах с непрерывной интеграцией найдите% APPDATA% \ NuGet \ NuGet.Configи введите следующее

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
    <packageSources>
        <add key="LocalRepositoryName" value="http://Domain/DataServices/Packages.svc/" /> 
    </packageSources> 
    

    Вы можете добавить более одной записи в packageSources, и NuGet будет искать их в порядке их появления

  4. Код после сборки из моего вопроса теперь может быть изменен следующим образом.

    <Target Name="BeforeBuild">
        <Exec Command="nuget install $(ProjectDir)packages.config 
        -o $(SolutionDir)packages" />
    </Target>
    

Конечным результатом этого является то, что всякий раз, когда изменяется утвержденное местоположение хранилища, конфигурация должнабыть изменено только в одном месте, а не в каждом файле csproj.Кроме того, именно администраторы сервера непрерывной интеграции определяют это местоположение, а не разработчики в своих вызовах командной строки.

...