Подтвердить что ты не робот

Как добавить настраиваемый канал nuget в сборку TeamCity?

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

<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>

Ответ 3

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

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

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

https://www.nuget.org/api/v2/; http://<teamcity_server_name > :81/guestAuth/app/nuget/v1/FeedService.svc

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

Ответ 4

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