Публикация пакетов NuGet
После создания пакета NuGet и nupkg-файла вы можете сделать пакет доступным для других разработчиков как общедоступным, так и частным образом. В этой статье описывается, как глобально предоставлять общий доступ к общедоступным пакетам через nuget.org.
Вы также можете сделать частные пакеты доступными только для команды или организации, размещая их в общей папке, частном сервере NuGet или стороннем репозитории, например myget, ProGet, Nexus Repository или Artifactory. Дополнительные сведения см. в разделе "Размещение собственных веб-каналов NuGet". Сведения о публикации с помощью артефактов Azure см. в статье "Публикация пакетов для NuGet.org".
Публикация на веб-сайте nuget.org
Чтобы опубликовать nuget.org, войдите в nuget.org с помощью учетной записи Майкрософт и создайте бесплатную учетную запись nuget.org. Следуйте инструкциям по добавлению новой отдельной учетной записи.
После получения учетной записи можно опубликовать пакет для nuget.org с помощью веб-портала nuget.org, dotnet CLI или NuGet версии 4.1.0 или более поздней версии. Вы также можете публиковать пакеты с помощью Azure Pipelines.
Отправка на веб-портал nuget.org
Чтобы отправить пакет на веб-сайт nuget.org, выполните следующие действия.
Выберите "Отправить " в верхнем меню в nuget.org, перейдите к пакету на компьютере и нажмите кнопку "Открыть".
Если идентификатор пакета уже существует в nuget.org, вы получите ошибку. Измените идентификатор пакета в проекте, перепакуйте и повторите попытку отправки.
Если имя пакета доступно, откроется раздел "Проверка", чтобы просмотреть метаданные из манифеста пакета. Если вы включили файл readme в пакет, выберите "Предварительный просмотр", чтобы убедиться, что все содержимое отрисовывается правильно.
Чтобы изменить любой из метаданных, измените файл проекта или nuspec-файл , перестройте, перепакуйте и отправьте еще раз.
Когда все сведения будут готовы, нажмите кнопку "Отправить".
Отправка с помощью командной строки
Чтобы отправить пакеты в nuget.org с помощью командной строки, можно использовать dotnet.exe
либо версию nuget.exe
4.1.0 или более поздней версии, которая реализует необходимые протоколы NuGet. Дополнительные сведения см. в разделе "Протоколы NuGet".
Чтобы использовать любую командную строку, сначала необходимо получить ключ API из nuget.org.
Создание ключа API
Войдите в учетную запись nuget.org или создайте учетную запись, если у вас еще нет учетной записи.
Выберите имя пользователя в правом верхнем углу и выберите ключи API.
Выберите " Создать" и укажите имя ключа.
В разделе "Выбор областей" выберите "Отправить".
В разделе "Выбор пакетов>" введите *.
Нажмите кнопку создания.
Выберите "Копировать", чтобы скопировать новый ключ.
Внимание
- Всегда сохраняйте секрет ключа API. Ключ API похож на пароль, позволяющий любому пользователю управлять пакетами от вашего имени. Удалите или повторно создайте ключ API, если он случайно обнаружен.
- Сохраните ключ в безопасном расположении, так как вы не сможете скопировать ключ позже. Если вы вернетесь на страницу ключа API, вам понадобится повторно создать ключ, чтобы скопировать его. Кроме того, вы можете удалить ключ API, если больше не хотите отправлять пакеты.
Определение области позволяет создавать отдельные ключи API для различных целей. Каждый ключ имеет интервал срока действия, и вы можете область ключ к определенным пакетам или шаблонам глобов. Вы также область каждый ключ к определенным операциям: отправка новых пакетов и версий пакетов, отправка только новых версий пакетов или отмена списка.
С помощью области можно создавать ключи API для разных пользователей, которые управляют пакетами для вашей организации, чтобы у них были только необходимые разрешения.
См. подробнее о ключах API в определении области.
Использование dotnet CLI
В папке, содержащей NUPKG-файл , выполните следующую команду. Укажите имя файла .nupkg и замените значение ключа ключом API.
dotnet nuget push Contoso.08.28.22.001.Test.1.0.0.nupkg --api-key qz2jga8pl3dvn2akksyquwcs9ygggg4exypy3bhxy6w6x6 --source https://api.nuget.org/v3/index.json
Выходные данные показывают результаты процесса публикации:
Pushing Contoso.08.28.22.001.Test.1.0.0.nupkg to 'https://www.nuget.org/api/v2/package'...
PUT https://www.nuget.org/api/v2/package/
warn : All published packages should have license information specified. Learn more: https://aka.ms/nuget/authoring-best-practices#licensing.
Created https://www.nuget.org/api/v2/package/ 1221ms
Your package was pushed.
Дополнительные сведения см. в статье dotnet nuget push.
Примечание.
Если вы хотите избежать активного использования тестового пакета на nuget.org, вы можете отправить на nuget.org тестовый сайт https://int.nugettest.org. Обратите внимание, что пакеты, отправленные в int.nugettest.org, могут не сохраняться.
Использование интерфейса командной строки NuGet
В командной строке выполните следующую команду, заменив
<your_API_key>
ключ, полученный из nuget.org:nuget setApiKey <your_API_key>
Эта команда сохраняет ключ API в конфигурации NuGet, поэтому вам не нужно снова вводить ключ API на том же компьютере.
Отправьте пакет с помощью следующей команды:
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
.
Чтобы изменить владение пакетом, выполните приведенные действия.
Войдите в nuget.org с учетной записью, которая в настоящее время владеет пакетом.
Выберите имя учетной записи в правом верхнем углу, выберите " Управление пакетами" и разверните узел "Опубликованные пакеты".
Выберите пакет, который требуется управлять, и в правой части страницы пакета выберите пункт "Управление пакетом".
На странице управления пакетами выберите "Владельцы".
Выполните одно из следующих действий:
Выберите " Удалить", чтобы удалить текущего владельца.
Добавьте владельца в раздел "Добавить владельца ", введя имя пользователя и сообщение, а затем нажмите кнопку "Добавить".
Это действие отправляет сообщение электронной почты новому совладельцу с ссылкой подтверждения. После подтверждения этот пользователь получит полные права доступа для добавления и удаления владельцев. Пока не подтвердится, в разделе "Текущие владельцы" отображается ожидание утверждения для этого человека.
Чтобы передать владение, как при изменении владельца или публикации пакета под неправильной учетной записью, добавьте нового владельца. После подтверждения владения они могут удалить старого владельца из списка.
Чтобы назначить владение компании или группе, создайте учетную запись nuget.org с псевдонимом электронной почты, который пересылает соответствующих участников группы. Например, различные пакеты Microsoft ASP.NET принадлежат учетным записям майкрософт и aspnet .
Иногда пакет может не иметь активного владельца. Например, исходный владелец может оставить компанию, которая произвела пакет. Если вы являетесь законным владельцем пакета и должны восстановить владение, используйте форму контакта на nuget.org, чтобы объяснить вашу ситуацию команде NuGet. Команда выполняет процесс проверки владения, включая попытку найти существующего владельца, и может отправить вам новое приглашение, чтобы стать владельцем пакета.