Добавление частных фидов пакетов Nuget в Visual Studio Online

У меня запущен частный веб-канал пакетов NuGet, который я использую для совместного использования определенных функций и расширений между моими проектами. Он отлично работает в Visual Studio, но недавно я начал настраивать сборку с непрерывной интеграцией для одного из своих проектов в Visual Studio Online, и кажется, что VSO не может видеть мою частную ленту.

Я использую новый метод восстановления пакетов, который включает в себя установку флажка «Разрешить NuGet загружать отсутствующие пакеты» в параметрах VS. Я не использую параметр "Включить восстановление пакета NuGet" в контекстном меню решения, потому что на самом деле это старый способ сделать это и вызывает проблемы в другом месте.

Я также не делаю ничего, что могло бы изменить файлы моего проекта; Я использую пользовательское определение сборки (используя материал рабочего процесса XAML), чтобы я мог применить его к любому из моих проектов, просто выбрав его из раскрывающегося списка «Шаблон процесса сборки» в редакторе определения сборки. Я делаю это таким образом, потому что я добавляю множество других шагов, включая некоторые сценарии после сборки, чтобы облегчить автоматическое развертывание на хостинг-сервере; некоторые из этих шагов немного сложны, поэтому сохранение их в процессе сборки означает, что мне нужно настроить их только один раз.

Итак, не используя старое решение с контекстным меню, которое помещает nuget.exe в папку решения, и не вмешиваясь в сам проект, как я могу получить сборку VSO для восстановления пакетов из моего личного канала?

В шаблоне рабочего процесса сборки есть действие NuGetRestore, которое может принимать аргументы командной строки. Я добавил следующее:

"-source https://www.nuget.org/api/v2/ http://www.example.com/nuget"

но это, кажется, не имеет значения. В этом действии также есть поле для «указания решений, для которых требуется восстановление пакетов NuGet», и я только что установил для него переменную ProjectsToBuild, которая задается при определении сборки. Я не получаю никаких ошибок от nuget.exe (по крайней мере, я не вижу), но сборка завершается ошибкой. Интересно, что в нем говорится, что соответствующие пространства имен не существуют, а не то, что ссылки не могут быть разрешены. Любые идеи?


person anaximander    schedule 13.07.2014    source источник
comment
Я также заметил, что ваш синтаксис в вашей команде был неправильным. nuget restore -source https://www.nuget.org/api/v2;https://www.myget.org/F/nuget. Ваши источники должны быть разделены точкой с запятой. Этот и мой пример конфигурации должны решить эту проблему. docs.nuget.org/consume/command-line-reference#restore- команда   -  person Jared    schedule 05.05.2015


Ответы (1)


Я считаю, что вам нужно добавить файл NuGet.config уровня решения. Файлы конфигурации NuGet связаны так же, как и web.config. Вы можете найти документацию здесь

NuGet сначала загружает NuGet.config из расположения по умолчанию, а затем загружает любой файл с именем NuGet.config, начиная с корня текущего диска и заканчивая текущим каталогом.

Это будет выглядеть примерно так:

    <?xml version="1.0" encoding="utf-8"?>
<configuration>
    <packageRestore>
        <!-- Allow NuGet to download missing packages -->
        <add key="enabled" value="True" />
        <!-- Automatically check for missing packages during build in Visual Studio -->
        <add key="automatic" value="True" />
    </packageRestore>
    <packageSources>
        <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
        <add key="PrivateNugetName" value="http://your.nuget.server.com/nuget" />
    </packageSources>
    <disabledPackageSources />
    <activePackageSource>
        <add key="All" value="(Aggregate source)" />
    </activePackageSource>
</configuration>
person Jared    schedule 05.05.2015