Восстановление Nuget завершается неудачей в Azure Devops с сообщением "невозможно загрузить индекс службы для источника"

У меня есть сборка для решения.NET, которое выполняется в частном агенте. Решение содержит проекты как.NET Core 2.1, так и.NET Standard 2.0.

Вот некоторые из установленных пакетов nuget:

  • NETStandard.Library v2.0.3
  • Microsoft.AspNetCore.Mvc v2.0.0
  • Microsoft.NETCore.App v2.1.5

Сбой сборки при попытке восстановить пакеты nuget со следующей ошибкой:

"F: \ Agent01 \ w \ 141 \ s \ xxxxxxx.sln" (цель восстановления) (1) -> (цель восстановления) -> C:\Program Files\dotnet\sdk\2.1.500\NuGet.targets(114,5): ошибка: невозможно загрузить индекс службы для источника https://xxxxxxxxxx.pkgs.visualstudio.com/_packaging/xxxxxxxxxx/nuget/v3/index.json. C: \ Program Files \ dotnet \ sdk \ 2.1.500 \ NuGet.targets (114,5): ошибка: код состояния ответа не указывает на успех: 401 (не авторизован).

Задача сборки следующая:

Nuget восстановить задачу сборки

Это содержание %appdata%\NuGet\nuget.config файл в агенте сборки:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
    <add key="MyFeed" value="https://xxxxxxxxxx.pkgs.visualstudio.com/_packaging/xxxxxxxxxx/nuget/v3/index.json" />
  </packageSources>
  <packageSourceCredentials>
    <MyFeed>
      <add key="Username" value="LocalBuildAgent" />
      <add key="ClearTextPassword" value="xxxxxxxxxxx" />
    </MyFeed>
  </packageSourceCredentials>
</configuration>

Я уже проверил несколько похожих вопросов, но пока не смог найти решение своей проблемы.

Некоторые заметки:

  • Токен личного доступа НЕ истек
  • Эта конкретная сборка успешно выполняется в других агентах сборки
  • Существует по крайней мере 1 сборка с задачейвосстановления nuget, которая была успешно запущена с использованием этого агента (обычная задача восстановления nuget, НЕ.NET Core)
  • Пробовал перезапустить агент сборки, безуспешно
  • Пробовал указывать конкретную версию nuget перед восстановлением, но безуспешно
  • Последняя версия.NET Core SDK в агенте сборки - 2.1.500 (установлено несколько версий)

Что мне не хватает? Как исправить эту проблему? Почему я не могу восстановить пакеты, используя dotnet restore команда?

ОБНОВИТЬ:

Пакеты восстанавливаются без ошибок при использовании старой задачи восстановления Nuget следующим образом:

Определение сборки

ОБНОВЛЕНИЕ 2:

Я могу восстановить пакеты с помощью задачи.NET Core v1:

Снимок экрана - восстановление пакетов с помощью задачи.NET Core v1

Или используя задачу v2 с аргументом --force:

Снимок экрана - восстановление пакетов с помощью --force

9 ответов

Решение

Я нашел решение - добавить следующий источник пакета в %appdata%\NuGet\nuget.config:

<add key="Microsoft Visual Studio Offline Packages" value="C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\" />

Полный файл выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="Microsoft Visual Studio Offline Packages" value="C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\" />
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
    <add key="MyFeed" value="https://xxxxxxxxxx.pkgs.visualstudio.com/_packaging/xxxxxxxxxx/nuget/v3/index.json" />
  </packageSources>
  <packageSourceCredentials>
    <MyFeed>
      <add key="Username" value="LocalBuildAgent" />
      <add key="ClearTextPassword" value="xxxxxxxxxxx" />
    </MyFeed>
  </packageSourceCredentials>
</configuration>

Кроме того, проверьте Регрессию в.NET SDK 500: "установка dotnet tool" завершается с ошибкой 401 (Неавторизовано), когда в NuGet.config #7524 есть частный канал. Эта проблема, похоже, вызвана.NET SDK 2.1.500.

Другой обходной путь - удалить эту версию:

Эта проблема отсутствует в.NET Core SDK 2.1.400, например, исчезает при удалении.NET Core SDK 2.1.500 и появляется снова при установке SDK 2.1.500.

Для тех, кто придет сюда в 2021 году с тем же сообщением об ошибке, добавление задачи NuGetAuthenticate@0 перед командой pack может быть недостающей частью:

      - task: NuGetAuthenticate@0

- task: DotNetCoreCLI@2
  inputs:
    command: 'pack'
    packagesToPack: $(projectPath)
    includesymbols: true
    includesource: true
    versioningScheme: 'off'
    verbosityPack: Normal
  displayName: 'Dotnet Pack'

Вот шаги, которые помогли мне решить эту же проблему в Visual Studio, когда я пытался создать решение, использующее пакет NuGet, размещенный в Azure DevOps.

  1. Убедитесь, что у вас есть разрешения владельца или участника на веб-канал в Azure DevOps.

  1. Затем в Visual Studio убедитесь, что вы вошли в систему, используя учетную запись, имеющую разрешения из предыдущего шага.

  1. Наконец, перестройте решение.

Надеюсь, это исправит вашу проблему!

Я столкнулся с той же проблемой, но по другой причине - не предоставил PAT соответствующие флаги доступа. Для PAT требуется область действия " Упаковка (создание, чтение, обновление и удаление каналов и пакетов)". Ранее я задавал только для PAT область действия "Построение" (артефакты, определения, запросы, очередь на сборку и обновленные свойства сборки).) ошибочно приняв Артефакты, включая частные фиды пакетов!

Взаимодействие с пользователем в VS (и в 2015, и в 2017 году) не принесло пользы, однако обе версии неоднократно отображали диалоговое окно учетных данных вместо предоставления дополнительной информации о том, что может быть причиной (кроме ответа об ошибке 401, подсказка в слове "Несанкционированный" хотя...).

Чтобы суммировать шаги для использования частного фида пакета DevOps -

  • В DevOps создайте новый PAT с областью действия Packages, как указано выше.
  • В DevOps также получите исходный URL-адрес пакета со страницы Connect to feed в Artifacts > Packages (это необходимо для параметра -source для 'nuget sources add')
  • Добавьте источник пакета (с учетными данными) в ваш%APPDATA%\NuGet\NuGet.config, используя -

    nuget.exe sources add -name {your_package_feed_name} -source https://pkgs.dev.azure.com/{your_org}/_packaging/{your_feed}/nuget/v3/index.json -username PATForPackages -password {the_pat_value_you_got_from_azure_devops}
    

Примечание. При добавлении источников nuget Base-64 кодирует PAT в настройке пароля packageSourceCredentials. Кроме того, находящийся в вашем профиле пользователя файл NuGet.config является относительно безопасным, если вы сохраняете его там защищенным, недостатком является то, что это является обязательным условием хоста, что является следствием того, что у nuget нет встроенной аутентификации DevOps Azure.

В моем случае это была глупость: срок действия Azure Devops PAT (токена личного доступа) истек.

Кстати, я рекомендую в файле nuget.config указать только источник, а затем добавить учетные данные таким образом:

      dotnet nuget update source your-source-name -u "tour_user@your.domain" -p "PAT obtained from Azure devops with appropriate packaging permissions"

При этом учетные данные добавляются в файл вашего профиля пользователя и закодируются на компьютере, поэтому это совершенно безопасно. Вы не должны раскрывать свой PAT в виде открытого текста.

Помните, что срок действия PAT по умолчанию составляет 1 месяц или максимум 12 месяцев, если вы измените срок действия по умолчанию.

Небольшое примечание для всех, кто может посетить этот ответ в 2023 году — иногда эта проблема может быть совершенно прерывистой. В пятницу у меня был рабочий конвейер, но сегодня, в понедельник, он вышел из строя с этим сообщением.

Просматривая эту SO-страницу, я случайно заметил и исправил совершенно не связанную с кодом проблему (комментарий, который нужно было удалить) и проверил это, продолжая читать ответы здесь. Каково же было мое удивление, когда, вернувшись к сборке, она была завершена.

Итак, один из возможных ответов: просто попробуйте снова запустить сборку.

Вздох.

Изменить: кажется, что в то время, когда у меня возникла эта проблема, статус службы для Azure Devops — Artefacts был «ухудшен». Поэтому проверьте это, прежде чем менять конвейер.

Использование последней задачи "Использовать.NET Core SDK 2.1.504" сработало для меня. Кажется, есть некоторые ошибочные версии.NET Core SDK 2.1.5xx.

Мне пришлось изменить установщик nuget на 4.8.1, чтобы это работало после переключения URL VSTS на новый URL Azure Devops.

Решение, которое сработало для меня:

  • перейдите в Артефакты Azure,
  • выберите компоненты фида, которые нужны вашему приложению,
  • и в разрешениях добавьте в этот фид учетную запись Project Collection Build Service,

и альт, мой конвейер сборки сработал и восстановил правильный файл csproj.

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