Быстрый старт: Создайте и опубликуйте пакет с помощью dotnet CLI

В этом кратком руководстве показано, как быстро создать пакет NuGet из библиотеки классов .NET и опубликовать его в nuget.org с помощью интерфейса командной строки .NET или dotnet CLI.

Необходимые условия

  • Пакет SDK .NET, предоставляющий инструмент командной строки dotnet. Начиная с Visual Studio 2017, интерфейс командной строки (CLI) dotnet автоматически устанавливается с любыми рабочими нагрузками, связанными с .NET или .NET Core.

  • Бесплатная учетная запись на nuget.org. Следуйте инструкциям по добавлению новой отдельной учетной записи.

Создание проекта библиотеки классов

Вы можете использовать существующий проект библиотеки классов .NET для кода, который требуется упаковать, или создать простой проект следующим образом:

  1. Создайте папку с именем AppLogger.
  2. Откройте командную строку и перейдите в папку AppLogger . Все команды dotnet CLI в этом кратком руководстве запускаются в текущей папке по умолчанию.
  3. Введите dotnet new classlib, который создает проект с текущим именем папки.

Дополнительные сведения см. в разделе dotnet new.

Добавление метаданных пакета в файл проекта

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

Откройте файл проекта CSPROJ, FSPROJ или VBPROJ и добавьте следующие свойства в существующий тег.<PropertyGroup> Используйте собственные значения для имени и компании и замените идентификатор пакета уникальным значением.

<PackageId>Contoso.08.28.22.001.Test</PackageId>
<Version>1.0.0</Version>
<Authors>your_name</Authors>
<Company>your_company</Company>

Important

Идентификатор пакета должен быть уникальным в nuget.org и других источниках пакетов. Публикация делает пакет общедоступным, поэтому если вы используете пример библиотеки AppLogger или другой тестовой библиотеки, используйте уникальное имя, включающее Sample или Test.

Вы можете добавить любые необязательные свойства, описанные в свойствах метаданных NuGet.

Note

Для пакетов, которые вы создаете для общедоступного потребления, обратите особое внимание на PackageTags свойство. Теги помогают другим пользователям найти ваш пакет и понять, для чего он предназначен.

Выполните команду pack

Чтобы создать пакет NuGet или NUPKG-файл из проекта, выполните команду dotnet pack , которая также автоматически создает проект.

dotnet pack

В выходных данных показан путь к NUPKG-файлу :

MSBuild version 17.3.0+92e077650 for .NET
  Determining projects to restore...
  Restored C:\Users\myname\source\repos\AppLogger\AppLogger.csproj (in 64 ms).
  AppLogger -> C:\Users\myname\source\repos\AppLogger\bin\Debug\net6.0\AppLogger.dll
  Successfully created package 'C:\Users\myname\source\repos\AppLogger\bin\Debug\Contoso.08.28.22.001.Test.1.0.0.nupkg'.

Автоматическое создание пакета при сборке

Чтобы dotnet pack автоматически запускался каждый раз, когда вы запускаете dotnet build, добавьте следующую строку в файл вашего проекта в разделе <PropertyGroup>.

    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>

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

Опубликуйте файл .nupkg на nuget.org, используя команду dotnet nuget push с ключом API, полученным с сайта nuget.org.

Note

  • Nuget.org сканирует все отправленные пакеты для вирусов и отклоняет все пакеты, содержащие вирусы. Nuget.org также периодически сканирует все существующие перечисленные пакеты.

  • Пакеты, которые вы публикуете на nuget.org, общедоступны для других разработчиков, если вы не скроете их. Сведения о частном размещении пакетов см. в разделе "Хостинг собственных каналов NuGet".

Получение ключа API

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

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

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

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

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

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

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

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

Important

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

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

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

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

Публикация с помощью команды dotnet nuget push

В папке, содержащей 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.

Ошибки публикации

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

  • Ключ API недопустим или истек.
  • Вы пытаетесь опубликовать пакет с идентификатором, который уже существует на узле.
  • Вы вносите изменения в опубликованный пакет, но вы забыли обновить номер версии перед попыткой повторной публикации.

Сообщение об ошибке обычно указывает источник проблемы.

Например, предположим, что идентификатор Contoso.App.Logger.Test существует в nuget.org. Если вы попытаетесь опубликовать пакет с этим идентификатором, вы получите следующую ошибку:

Response status code does not indicate success: 403 (The specified API key is invalid, has expired, or does not have permission to access the specified package.).

Чтобы устранить эту ситуацию, проверьте область, дату окончания срока действия и значение ключа API. Если ключ действителен, ошибка указывает, что идентификатор пакета уже существует на узле. Чтобы устранить проблему, измените идентификатор пакета, чтобы он был уникальным, перестроите проект, повторно создайте NUPKG-файл и повторите push команду.

Управление опубликованным пакетом

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

Note

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

Снимок экрана: предупреждение nuget.org о том, что пакет еще не опубликован. Текст указывает, что проверка и индексирование могут занять час.

Теперь, когда пакет NuGet опубликован в nuget.org, другие разработчики могут использовать его в своих проектах.

Если вы создаете пакет, который не полезен (например, этот пример пакета из пустой библиотеки классов) или если вы не хотите, чтобы пакет был видимым, вы можете отменить список пакета, чтобы скрыть его из результатов поиска:

  1. После того как пакет появится в разделе "Опубликованные пакеты " на странице "Управление пакетами ", щелкните значок карандаша рядом с списком пакетов.

    Снимок экрана: страница

  2. На следующей странице выберите " Список", снимите флажок "Список" в результатах поиска и нажмите кнопку "Сохранить".

    Снимок экрана: страница nuget.org. В разделе

Теперь пакет отображается в разделе "Неподписанные пакеты " в разделе "Управление пакетами " и больше не отображается в результатах поиска.

Note

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

Поздравляем с созданием и публикацией первого пакета NuGet!

Дополнительные видео NuGet на канале 9 и YouTube.

Дальнейшие действия

Дополнительные сведения о создании пакетов с помощью dotnet CLI:

Дополнительные сведения о создании и публикации пакетов NuGet: