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

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

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

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

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

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

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

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

Ответ 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>