Краткое руководство. Создание и публикация пакета NuGet с помощью Visual Studio (только Для Windows)
С помощью Microsoft Visual Studio можно создать пакет NuGet из библиотеки классов .NET, а затем опубликовать его в nuget.org с помощью средства КОМАНДНОй строки.
Краткое руководство предназначено только для пользователей Windows. Если вы используете Mac, используйте .NET CLI.
Необходимые условия
Установите Visual Studio 2022 для Windows с рабочей нагрузкой, связанной с .NET Core.
Вы можете установить версию Community 2022 бесплатно с сайта visualstudio.microsoft.comили использовать версии Professional или Enterprise.
Visual Studio 2017 и более поздних версиях автоматически включает возможности NuGet при установке рабочей нагрузки, связанной с .NET.
Установите интерфейс командной строки .NET, если он еще не установлен.
Для Visual Studio 2017 и более поздних версий интерфейс командной строки .NET автоматически устанавливается с любой рабочей нагрузкой, связанной с .NET Core. В противном случае установите .NET Core SDK-пакет, чтобы получить .NET CLI. Интерфейс командной строки .NET требуется для проектов .NET, использующих формат в стиле SDK ( атрибут SDK). Шаблон библиотеки классов .NET по умолчанию в Visual Studio 2017 и более поздних версиях использует атрибут SDK.
Важный
Если вы работаете с проектом, отличным от стиля SDK, следуйте процедурам из раздела Создание и публикация пакета .NET Framework (Visual Studio), чтобы создать и опубликовать пакет. В этой статье рекомендуется использовать интерфейс командной строки .NET. Несмотря на то что вы можете опубликовать любой пакет NuGet с помощью интерфейса командной строки NuGet, некоторые из действий, описанных в этой статье, относятся к проектам в стиле SDK и интерфейсу командной строки .NET. Интерфейс командной строки NuGet используется для проектов, не относящихся к пакету SDK, (обычно .NET Framework).
зарегистрируйте бесплатную учетную запись на nuget.org, если у вас еще нет учетной записи. Перед тем как вы сможете отправить пакет NuGet, необходимо зарегистрировать аккаунт и подтвердить его.
Установите интерфейс командной строки NuGet, скачав его из nuget.org. Добавьте файл nuget.exe в подходящую папку и добавьте ее в переменную среды PATH.
Создание проекта библиотеки классов
Вы можете использовать существующий проект библиотеки классов .NET для кода, который требуется упаковать, или создать его следующим образом:
В Visual Studio выберите Файл>Создать>Проект.
В окне Создание проекта выберите в раскрывающихся списках C#, Windowsи библиотеку.
В результирующем списке шаблонов проектов выберите библиотеку классов (описание: проект для создания библиотеки классов, предназначенной для .NET или .NET Standard), а затем выберите Далее.
В окне Настройка нового проекта введите AppLogger для имени проекта, а затем выберите Далее.
В окне Дополнительные сведения выберите соответствующий фреймворк, а затем выберите Создать.
Если вы не уверены, какую платформу выбрать, последний вариант является хорошим выбором и может быть легко изменен позже. Для получения информации о том, какую платформу выбрать, см. разделы Когда следует выбирать .NET 5.0 или .NET 6.0 по сравнению с .NET Standard.
Чтобы убедиться, что проект был создан правильно, выберите Сборка>решение сборки. Библиотека DLL находится в папке Debug (или в папке Release, если собираете эту конфигурацию).
(Необязательно) Для этого краткого руководства вам не нужно писать дополнительный код для пакета NuGet, так как библиотека классов шаблонов достаточно для создания пакета. Тем не менее, если вы хотите использовать некоторый функциональный код для пакета, добавьте следующий код:
namespace AppLogger { public class Logger { public void Log(string text) { Console.WriteLine(text); } } }
Настройка свойств пакета
После создания проекта можно настроить свойства пакета NuGet, выполнив следующие действия.
Выберите проект в обозревателе решений, а затем выберите имя проекта><> свойства, где> имя проекта <— имя проекта.
Разверните узел пакета, а затем выберите Общие.
Узел пакета отображается только для проектов в стиле SDK в Visual Studio. Если вы используете проект, отличный от пакета SDK (как правило, .NET Framework), перенести проектили просмотреть создание и публикация пакета .NET Framework пошаговые инструкции.
Для пакетов, созданных для широкого потребления, уделите особое внимание свойству Теги, так как теги помогают другим пользователям найти ваш пакет и понять, что он делает.
Присвойте пакету уникальный идентификатор пакета и заполните любые другие нужные свойства. Таблица, показывающая сопоставление свойств MSBuild (проектов в стиле SDK) с свойствами файла nuspec .nus pec, см. в разделе целевых объектов пакета. Для описания свойств файла .nuspec, пожалуйста, см. справочник по файлу .nuspec. Все эти свойства входят в манифест
.nuspec
, который Visual Studio создает для проекта.Важный
Необходимо предоставить пакету идентификатор, уникальный для nuget.org или любого узла, который вы используете. В противном случае возникает ошибка. В этом кратком руководстве мы рекомендуем включить в название Пример или Тест, так как публикация делает пакет общедоступным.
(Необязательно) Чтобы просмотреть свойства непосредственно в файле проекта AppLogger.csproj, выберите Проект>Изменить файл проекта.
Вкладка AppLogger.csproj загружается.
Этот параметр доступен начиная с Visual Studio 2017 для проектов, использующих атрибут стиля ПАКЕТА SDK. Для более ранних версий Visual Studio необходимо выбрать Project>Выгрузить проект, прежде чем изменить файл проекта.
Выполните команду pack
Чтобы создать пакет NuGet из проекта, выполните следующие действия.
Выберите Сборка>Configuration Manager, а затем задайте текущую конфигурацию решения на Release.
Выберите проект AppLogger в обозревателе решений , а затем выберите пакет.
Visual Studio создает проект и создает файл .nupkg.
См. окно выходных данных для получения дополнительных сведений, содержащее путь к файлу пакета. В этом примере собранная сборка находится в bin\Release\net6.0, как и следует для целевой платформы .NET 6.0.
1>------ Build started: Project: AppLogger, Configuration: Release Any CPU ------ 1>AppLogger -> d:\proj\AppLogger\AppLogger\bin\Release\net6.0\AppLogger.dll 1>Successfully created package 'd:\proj\AppLogger\AppLogger\bin\Release\AppLogger.1.0.0.nupkg'. ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
Если в меню не отображается команда пакета, проект, вероятно, не является проектом в стиле SDK, и вам нужно использовать интерфейс командной строки NuGet. Либо перенести проект и использовать .NET CLI, либо посмотреть пошаговые инструкции по созданию и публикации пакета .NET Framework.
(Необязательно) Создание пакета при сборке
Visual Studio можно настроить для автоматического создания пакета NuGet при сборке проекта:
Выберите проект в обозревателя решений, а затем выберите имя проекта><> свойства, где <имя проекта> — это имя проекта (AppLogger в этом случае).
Разверните узел пакета, выберите Общие, а затем выберите Создать пакет NuGet для сборки.
Заметка
При автоматическом создании пакета дополнительное время на упаковку увеличивает общее время сборки вашего проекта.
(Необязательно) Упаковать с помощью MSBuild
В качестве альтернативы использованию команды меню пакета NuGet 4.x+ и MSBuild 15.1+ поддерживает целевой объект pack
, если проект содержит необходимые данные пакета:
Откройте проект в обозревателе решений , затем откройте командную строку, выбрав Сервис,>,Командная строка,>,Командная строка разработчика.
Командная строка открывается в каталоге проекта.
Выполните следующую команду:
msbuild -t:pack
.
Дополнительные сведения см. в статье Создание пакета с помощью MSBuild.
Публикация пакета
После создания файла .nupkg опубликуйте его в nuget.org с помощью интерфейса командной строки .NET или интерфейса командной строки NuGet, а также ключа API, полученного из nuget.org.
Заметка
Nuget.org проверяет все отправленные пакеты для вирусов и отклоняет пакеты, если он находит вирусы. Nuget.org также периодически сканирует все существующие перечисленные пакеты.
Пакеты, которые вы публикуете в nuget.org, видны другим разработчикам, если вы не уберёте их из списка. Сведения о частном размещении пакетов см. в статье Host your own NuGet feeds.
Получение ключа API
Перед публикацией пакета NuGet создайте ключ API:
войдите в учетную запись nuget.org или создайте учетную запись, если у вас еще нет учетной записи.
Выберите имя пользователя в правом верхнем углу и выберите ключи API .
Выберите Создатьи укажите имя ключа.
В разделе Выбор областейвыберите Push.
В разделе "Выбор пакетов">укажите шаблон globи введите *.
Выберите Создать.
Выберите Копировать, чтобы скопировать новый ключ.
Важный
- Всегда сохраняйте секрет ключа API. Ключ API похож на пароль, позволяющий любому пользователю управлять пакетами от вашего имени. Удалите или повторно создайте ключ API, если он случайно обнаружен.
- Сохраните ключ в безопасном расположении, так как вы не сможете скопировать ключ позже. Если вы вернеесь на страницу ключа API, необходимо повторно создать ключ, чтобы скопировать его. Вы также можете удалить ключ API, если вы больше не хотите отправлять пакеты.
области позволяет создавать отдельные ключи API для различных целей. Каждый ключ имеет срок действия, и вы можете ограничить ключ определенными пакетами или шаблонами glOB-объектов. Кроме того, каждый ключ применяется к определенным операциям: отправка новых пакетов и версий пакетов, отправка только новых версий пакетов или отмена списка.
С помощью определения области действия можно создавать ключи API для разных пользователей, которые управляют пакетами для вашей организации, чтобы у них были только необходимые права.
Для получения дополнительной информации см. раздел об ограниченных ключах API.
Публикация с помощью интерфейса командной строки .NET или Интерфейса командной строки NuGet
Каждый из следующих средств ИНТЕРФЕЙСА командной строки позволяет отправлять пакет на сервер и публиковать его. Выберите вкладку для вашего CLI-инструмента: .NET CLI или NuGet CLI.
Использование .NET CLI (dotnet.exe) является рекомендуемой альтернативой использованию интерфейса командной строки NuGet.
В папке, содержащей файл .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, могут не сохраняться на постоянной основе.
Опубликование ошибок
Ошибки из команды push
обычно указывают на проблему. Например, возможно, вы забыли обновить номер версии в проекте, поэтому вы пытаетесь опубликовать уже существующий пакет.
Вы также увидите ошибки, если ключ API недопустим или истек, или если вы пытаетесь опубликовать пакет с помощью идентификатора, уже существующего на узле. Предположим, например, идентификатор AppLogger-test
уже существует в nuget.org. Если вы попытаетесь опубликовать пакет с этим идентификатором, команда push
выдает следующую ошибку:
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выберите имя пользователя в правом верхнем углу, а затем выберите Управление пакетами.
Заметка
Может потребоваться некоторое время для индексирования пакета и отображения в результатах поиска, где другие пользователи могут найти его. В течение этого времени ваш пакет отображается в разделе Списки пакетов, и на странице пакета отображается следующее сообщение:
Теперь вы опубликовали пакет NuGet для nuget.org, что другие разработчики могут использовать в своих проектах.
Если вы создали пакет, который не полезен (например, этот пример пакета, созданный с пустой библиотекой классов), или вы решили, что пакет не будет отображаться, вы можете отменить список пакет, чтобы скрыть его от результатов поиска:
После появления пакета в разделе опубликованных пакетов на странице Управление пакетами выберите значок карандаша рядом с списком пакетов.
На следующей странице выберите Листинг, снимите флажок Список в результатах поиска и выберите Сохранить.
Теперь пакет отображается в разделе Несписочные пакеты в Управление пакетами и больше не отображается в результатах поиска.
Заметка
Чтобы избежать активного использования тестового пакета на nuget.org, вы можете разместить его на тестовом сайте nuget.org по адресу https://int.nugettest.org. Обратите внимание, что пакеты, загруженные на int.nugettest.org, могут не сохраняться.
Добавьте readme или другой файл
Чтобы напрямую указать файлы для включения в пакет, измените файл проекта и добавьте свойство content
:
<ItemGroup>
<Content Include="readme.txt">
<Pack>true</Pack>
<PackagePath>\</PackagePath>
</Content>
</ItemGroup>
В этом примере свойство указывает файл с именем readme.txt в корневом каталоге проекта. Visual Studio отображает содержимое этого файла как обычный текст сразу после установки пакета. Файлы readme не отображаются для пакетов, установленных в качестве зависимостей. Например, вот модуль чтения для пакета HtmlAgilityPack:
1 ----------------------------------------------------
2 ---------- Html Agility Pack Nuget Readme ----------
3 ----------------------------------------------------
4
5 ----Silverlight 4 and Windows Phone 7.1+ projects-----
6 To use XPATH features: System.Xml.Xpath.dll from the 3 Silverlight 4 SDK must be referenced.
7 This is normally found at
8 %ProgramFiles(x86)%\Microsoft SDKs\Microsoft SDKs\Silverlight\v4.0\Libraries\Client
9 or
10 %ProgramFiles%\Microsoft SDKs\Microsoft SDKs\Silverlight\v4.0\Libraries\Client
11
12 ----Silverlight 5 projects-----
13 To use XPATH features: System.Xml.Xpath.dll from the Silverlight 5 SDK must be referenced.
14 This is normally found at
15 %ProgramFiles(x86)%\Microsoft SDKs\Microsoft SDKs\Silverlight\v5.0\Libraries\Client
16 or
17 %ProgramFiles%\Microsoft SDKs\Microsoft SDKs\Silverlight\v5.0\Libraries\Client
Заметка
Если вы добавляете только readme.txt в корневой каталог проекта, не включая его в свойство content
файла проекта, он не будет включен в пакет.
Связанное видео
Найдите видео NuGet на Channel 9 и YouTube.
Поздравляем с созданием пакета NuGet с помощью библиотеки классов Visual Studio .NET. Перейдите к следующей статье, чтобы узнать, как создать пакет NuGet с помощью Visual Studio .NET Framework.
Дополнительные сведения о том, что NuGet должен предложить, см. в следующих статьях: