Как добавить пользовательский фид Nuget в сборку TeamCity?

Я создал Nuget Server, используя Teamcity (работающий на виртуальной машине в Интернете), и создал сборку, которая публикует пакет в нем.

У меня также есть другой проект, который должен использовать этот пакет. Этот проект также построен на teamcity. В моей локальной Visual Studio я добавил URI ленты Nuget, установил пакет, и все работает отлично. Но когда я пытаюсь построить его на teamcity, он говорит, что "Пакет не найден".

Итак, мой вопрос: "Как добавить пользовательский фид Nuget в сборку TeamCity?"

5 ответов

Решение

Источники пакетов NuGet настраиваются с помощью Visual Studio, но они хранятся в файле конфигурации для каждого пользователя, который находится по адресу c:\Users\$USER\AppData\Roaming\NuGet\NuGet.config, Запись об источнике пакета TeamCity должна быть добавлена ​​в файл конфигурации пользователя агента сборки, который запускает ваши сборки.

  1. На локальном компьютере откройте файл Nuget.config для своего пользователя.
  2. Скопируйте запись для источника пакета TeamCity в буфер обмена.
  3. В агенте сборки откройте файл NuGet.config для пользователя, который выполняет ваши сборки TeamCity
  4. Вставьте в исходную запись пакета TeamCity. Сохранить и выйти.
  5. Запустите сборку еще раз. Теперь он должен найти пакет.

РЕДАКТИРОВАТЬ: ladenedge документы хорошее решение, которого не было, когда я первоначально ответил на этот вопрос. Решение особенно полезно, если у вас нет доступа администратора к агенту сборки или вы хотите настроить источники пакетов для каждого проекта.

NuGet теперь может читать источники из NuGet.targets Файл хранится с самим источником, как объяснено в ответе на дублирующий вопрос.

<ItemGroup Condition=" '$(PackageSources)' == '' ">
    <!-- Package sources used to restore packages. By default, registered sources under %APPDATA%\NuGet\NuGet.Config will be used -->
    <!-- The official NuGet package source (https://nuget.org/api/v2/) will be excluded if package sources are specified and it does not appear in the list -->
    <PackageSource Include="https://nuget.org/api/v2/" />
    <PackageSource Include="https://my-nuget-source/nuget/" />
</ItemGroup>

Я не хотел добавлять фид в NuGet.config в исходный код, так как это часть инфраструктуры сборки, а не часть кода приложения.

Также я не хотел добавлять фид в NuGet.config для агентов сборки TeamCity, так как его сложно поддерживать (обновлять, добавлять, удалять), плюс у нас есть много агентов для сборки.

Что сработало лучше всего для меня - добавление %system.PackageSources% в TeamCity (в проекте Root), содержащем как глобальную ленту новостей, так и мой пользовательский (через точку с запятой):

https://www.nuget.org/api/v2/; Http: //: 81 / guestAuth / приложение / NuGet / v1 / FeedService.svc

Если вы посмотрите на NuGet.Targets, вы увидите, что он использует $(PackageSources), если он определен. Таким образом, вы определяете его как "системный" параметр в TeamCity, и он передается процессу сборки.

В TeamCity мы настроили два шага установщика NuGet; первый обеспечивает локальную (пользовательскую) установку NuGet, а второй восстанавливает пакеты NuGet, доступные в Интернете.

Локальная (выборочная) установка просматривает файл .sln, а затем использует наш определенный путь к источникам пакетов , чтобы найти наши локальные пакеты NuGet.

Это было сделано с помощью TeamCity v2022.04.3

В моем случае файл DLL сохраняется здесь:C:\Users\user_account\.nuget\packages\package-name\package_version\lib\netcoreapp1.0\assembly_name.dll

Другие вопросы по тегам