Публикация пакетов NuGet

После создания пакета NuGet и nupkg-файла вы можете сделать пакет доступным для других разработчиков как общедоступным, так и частным образом. В этой статье описывается, как глобально предоставлять общий доступ к общедоступным пакетам с помощью nuget.org.

Вы также можете сделать частные пакеты доступными только для команды или организации, размещая их в общей папке, частном сервере NuGet или стороннем репозитории, например myget, ProGet, Nexus Repository или Artifactory. Дополнительные сведения см. в разделе Размещение собственных фидов NuGet. Сведения о публикации с помощью Azure Artifacts см. в статье «Публикация пакетов в NuGet.org».

Публикация в nuget.org

Чтобы опубликовать на nuget.org, войдите в nuget.org с помощью учетной записи Майкрософт и используйте её, чтобы создать бесплатную учетную запись на nuget.org. Следуйте инструкциям по добавлению новой отдельной учетной записи.

Снимок экрана, который показывает ссылку на вход в NuGet.

После получения учетной записи можно опубликовать пакет для nuget.org с помощью веб-портала nuget.org, dotnet CLI или NuGet версии 4.1.0 или более поздней версии. Вы также можете публиковать пакеты с помощью Azure Pipelines.

Замечание

Если вы хотите опубликовать пакет на тестовом сайте перед публикацией в nuget.org, можно использовать https://int.nugettest.org. Обратите внимание, что пакеты, отправленные в int.nugettest.org, могут не сохраняться.

Отправка на веб-портал nuget.org

Чтобы отправить пакет на веб-сайт nuget.org, выполните следующие действия.

  1. Выберите " Отправить " в верхнем меню в nuget.org, перейдите к пакету на компьютере и нажмите кнопку "Открыть".

    Снимок экрана диалогового окна

    Если идентификатор пакета уже существует в nuget.org, вы получите ошибку. Измените идентификатор пакета в проекте, перепакуйте и повторите попытку отправки.

  2. Если имя пакета доступно, откроется раздел "Проверка ", чтобы просмотреть метаданные из манифеста пакета. Если вы включили файл readme в пакет, выберите "Предварительный просмотр ", чтобы убедиться, что все содержимое отрисовывается правильно.

    Чтобы изменить любой из метаданных, измените файл проекта или nuspec-файл , перестройте, перепакуйте и отправьте еще раз.

  3. Когда все сведения будут готовы, нажмите кнопку "Отправить".

Отправка с помощью командной строки

Чтобы отправить пакеты в nuget.org с помощью командной строки, можно использовать dotnet.exe либо версию nuget.exe 4.1.0 или более поздней версии, которая реализует необходимые протоколы NuGet. Дополнительные сведения см. в разделе "Протоколы NuGet".

Чтобы использовать любую командную строку, сначала необходимо получить ключ API из nuget.org.

Создание ключа API

  1. Войдите в учетную запись nuget.org или создайте учетную запись , если у вас еще нет учетной записи .

  2. В правом верхнем углу выберите имя пользователя и выберите ключи API.

  3. Нажмите кнопку "Создать", а затем введите имя ключа.

  4. В разделе "Выбор областей" выберите "Отправить".

  5. В разделе "Выбор пакетов" для шаблона glob введите звездочку (*).

  6. Нажмите кнопку "Создать".

  7. Выберите "Копировать", чтобы скопировать новый ключ.

    Снимок экрана: страница nuget.org с новым ключом API, сообщением о копировании ключа и выделенной кнопкой

Это важно

  • Всегда сохраняйте секрет ключа API. Ключ API похож на пароль, который любой пользователь может использовать для управления пакетами от вашего имени. Удалите или повторно создайте ключ API, если он случайно обнаружен.
  • Сохраните ключ в безопасном расположении, так как вы не сможете скопировать ключ позже. Если вы вернеесь на страницу ключа API, необходимо повторно создать ключ, чтобы скопировать его. Вы также можете удалить ключ API, если вы больше не хотите отправлять пакеты.

Определение области предоставляет способ создания отдельных ключей API для различных целей. Каждый ключ имеет интервал времени окончания срока действия, и вы можете ограничить ключ определенными пакетами или шаблонами glOB-объектов. Кроме того, каждый ключ применяется к определенным операциям: отправка новых пакетов и версий пакетов, отправка только новых версий пакетов или отмена списка.

Определяя область действия, можно создавать ключи API для разных пользователей, которые управляют пакетами для вашей организации, чтобы у них были только те разрешения, которые им необходимы.

Для получения дополнительной информации см. Область действия API ключей.

Использование dotnet CLI

В папке, содержащей NUPKG-файл , выполните следующую команду. Замените <package-file> именем вашего файла .nupkg и замените <API-key> вашим ключом API.

dotnet nuget push <package-file> --api-key <API-key> --source https://api.nuget.org/v3/index.json

Tip

Начиная с NuGet 7.6 (пакет SDK .NET 10.0.300), можно задать переменную среды NUGET_API_KEY вместо передачи --api-key в командной строке. Это полезно в сценариях CI/CD, где вы не хотите передавать ключ в качестве аргумента командной строки.

Выходные данные показывают результаты процесса публикации:

Pushing <package-file> to 'https://www.nuget.org/api/v2/package'...
  PUT https://www.nuget.org/api/v2/package/
  Created https://www.nuget.org/api/v2/package/ 2891ms
Your package was pushed.

Дополнительные сведения см. в статье dotnet nuget push.

Использование интерфейса командной строки NuGet

  1. В командной строке выполните следующую команду, заменив <your_API_key> на ключ, который вы получили с nuget.org.

    nuget setApiKey <your_API_key>
    

    Эта команда сохраняет ключ API в конфигурации NuGet, поэтому вам не нужно снова вводить ключ API на том же компьютере.

    Замечание

    Этот ключ API не используется для аутентификации с частными каналами. Сведения об управлении учетными данными для проверки подлинности с помощью этих источников см. в команде nuget sources.

  2. Отправьте пакет с помощью следующей команды:

    nuget push YourPackage.nupkg -Source https://api.nuget.org/v3/index.json
    

Публикация с помощью Azure Pipelines

Пакеты можно отправлять в nuget.org с помощью Azure Pipelines в рамках процесса непрерывной интеграции или непрерывного развертывания (CI/CD). Дополнительные сведения см. в статье "Публикация пакетов NuGet с помощью Azure Pipelines".

Публикация подписанного пакета

Чтобы отправить подписанный пакет, необходимо сначала зарегистрировать сертификат , используемый для подписи пакета. Если вы не соответствуете требованиям к подписанному пакету, nuget.org отклоняет пакет.

Ограничения размера пакета

Nuget.org имеет ограничение размера пакета около 250 МБ. При отправке пакета, превышающего это ограничение, отображается следующая ошибка:

Файл пакета превышает ограничение размера. Повторите попытку.

Если такой пакет отправляется из командной строки, создается следующий результат:

  RequestEntityTooLarge https://www.nuget.org/api/v2/package/ 13903ms
error: Response status code does not indicate success: 413 (The package file exceeds the size limit. Please try again.).

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

Проверка и индексирование пакетов

Пакеты, отправленные в nuget.org, проходят несколько проверок, таких как проверки вирусов, и существующие пакеты периодически сканируются. Когда пакет проходит все проверки, может потребоваться некоторое время, чтобы он был проиндексирован и появился в результатах поиска. Пока индексируется пакет, он отображается в разделе "Неподписанные пакеты" и отображается следующее сообщение на странице пакета:

Снимок экрана: сообщение о том, что пакет еще не опубликован.

После завершения проверки и индексирования вы получите сообщение электронной почты о том, что пакет был успешно опубликован. Если пакет не проходит проверку, страница пакета обновляется, чтобы отобразить связанную ошибку, и вы получите уведомление по электронной почте.

Проверка пакетов и индексирование обычно занимает менее 15 минут. Если публикация пакетов занимает больше времени, проверьте состояние nuget.org на status.nuget.org. Если все системы работают и пакет не публикуется в течение часа, обратитесь в nuget.org с помощью ссылки на службу поддержки контактов на странице пакета.

Чтобы просмотреть состояние пакета, выберите "Управление пакетами " под именем учетной записи в правом верхнем углу nuget.org и выберите пакет из опубликованных пакетов или неподписанных пакетов.

Управление владельцами пакетов на nuget.org

Владельцы пакетов имеют полные разрешения для пакета, включая добавление и удаление других владельцев и публикацию обновлений.

Хотя nuspec-файл пакета NuGet определяет авторов пакета, nuget.org не использует эти метаданные для определения владения. Вместо этого nuget.org назначает права владения пользователю, который публикует пакет: либо вошедшему в систему пользователю, загрузившему пакет, либо пользователю, чей ключ API был использован с dotnet push, nuget SetApiKey или nuget push.

Чтобы изменить владение пакетом, выполните приведенные действия.

  1. Войдите в nuget.org с учетной записью, которая в настоящее время владеет пакетом.

  2. Выберите имя учетной записи в правом верхнем углу, выберите Управление пакетами и разверните Опубликованные пакеты.

  3. Выберите пакет, который требуется управлять, и в правой части страницы пакета выберите пункт "Управление пакетом".

  4. На странице управления пакетами выберите "Владельцы".

  5. Выполните одно из следующих действий:

    • Выберите "Удалить", чтобы удалить текущего владельца.

    • Добавьте владельца в раздел "Добавить владельца ", введя имя пользователя и сообщение, а затем нажмите кнопку "Добавить".

      Это действие отправляет сообщение электронной почты новому совладельцу с ссылкой подтверждения. После подтверждения этот пользователь имеет полные разрешения на добавление и удаление владельцев. Пока не будет подтверждено, в разделе "Текущие владельцы" для этого человека отображается статус ожидания утверждения.

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

Чтобы назначить владение компании или группе, создайте учетную запись nuget.org с псевдонимом электронной почты, который пересылает письма соответствующим участникам команды. Например, различные пакеты Microsoft ASP.NET принадлежат учетным записям майкрософт и aspnet .

Иногда пакет может не иметь активного владельца. Например, исходный владелец может оставить компанию, которая произвела пакет. Если вы являетесь законным владельцем пакета и должны восстановить владение, используйте форму контакта на nuget.org, чтобы объяснить вашу ситуацию команде NuGet. Команда выполняет процесс проверки владения, включая попытку найти существующего владельца, и может отправить вам новое приглашение, чтобы стать владельцем пакета.

Дальнейшие шаги