Прочитать на английском

Поделиться через


Краткое руководство. Создание и публикация пакета 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 для кода, который требуется упаковать, или создать его следующим образом:

  1. В Visual Studio выберите Файл>Создать>Проект.

  2. В окне Создание проекта выберите в раскрывающихся списках C#, Windowsи библиотеку.

  3. В результирующем списке шаблонов проектов выберите библиотеку классов (описание: проект для создания библиотеки классов, предназначенной для .NET или .NET Standard), а затем выберите Далее.

  4. В окне Настройка нового проекта введите AppLogger для имени проекта, а затем выберите Далее.

  5. В окне Дополнительные сведения выберите соответствующий фреймворк, а затем выберите Создать.

    Если вы не уверены, какую платформу выбрать, последний вариант является хорошим выбором и может быть легко изменен позже. Для получения информации о том, какую платформу выбрать, см. разделы Когда следует выбирать .NET 5.0 или .NET 6.0 по сравнению с .NET Standard.

  6. Чтобы убедиться, что проект был создан правильно, выберите Сборка>решение сборки. Библиотека DLL находится в папке Debug (или в папке Release, если собираете эту конфигурацию).

  7. (Необязательно) Для этого краткого руководства вам не нужно писать дополнительный код для пакета NuGet, так как библиотека классов шаблонов достаточно для создания пакета. Тем не менее, если вы хотите использовать некоторый функциональный код для пакета, добавьте следующий код:

    C#
    namespace AppLogger
    {
        public class Logger
        {
            public void Log(string text)
            {
                Console.WriteLine(text);
            }
        }
    }
    

Настройка свойств пакета

После создания проекта можно настроить свойства пакета NuGet, выполнив следующие действия.

  1. Выберите проект в обозревателе решений, а затем выберите имя проекта><> свойства, где> имя проекта <— имя проекта.

  2. Разверните узел пакета, а затем выберите Общие.

    Узел пакета отображается только для проектов в стиле SDK в Visual Studio. Если вы используете проект, отличный от пакета SDK (как правило, .NET Framework), перенести проектили просмотреть создание и публикация пакета .NET Framework пошаговые инструкции.

    снимок экрана: свойства пакета NuGet в проекте Visual Studio.

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

  4. Присвойте пакету уникальный идентификатор пакета и заполните любые другие нужные свойства. Таблица, показывающая сопоставление свойств MSBuild (проектов в стиле SDK) с свойствами файла nuspec .nus pec, см. в разделе целевых объектов пакета. Для описания свойств файла .nuspec, пожалуйста, см. справочник по файлу .nuspec. Все эти свойства входят в манифест .nuspec, который Visual Studio создает для проекта.

    Важно!

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

  5. (Необязательно) Чтобы просмотреть свойства непосредственно в файле проекта AppLogger.csproj, выберите Проект>Изменить файл проекта.

    Вкладка AppLogger.csproj загружается.

    Этот параметр доступен начиная с Visual Studio 2017 для проектов, использующих атрибут стиля ПАКЕТА SDK. Для более ранних версий Visual Studio необходимо выбрать Project>Выгрузить проект, прежде чем изменить файл проекта.

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

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

  1. Выберите Сборка>Configuration Manager, а затем задайте текущую конфигурацию решения на Release.

  2. Выберите проект AppLogger в обозревателе решений , а затем выберите пакет.

    Visual Studio создает проект и создает файл .nupkg.

  3. См. окно выходных данных для получения дополнительных сведений, содержащее путь к файлу пакета. В этом примере собранная сборка находится в 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 ==========
    
  4. Если в меню не отображается команда пакета, проект, вероятно, не является проектом в стиле SDK, и вам нужно использовать интерфейс командной строки NuGet. Либо перенести проект и использовать .NET CLI, либо посмотреть пошаговые инструкции по созданию и публикации пакета .NET Framework.

(Необязательно) Создание пакета при сборке

Visual Studio можно настроить для автоматического создания пакета NuGet при сборке проекта:

  1. Выберите проект в обозревателя решений, а затем выберите имя проекта><> свойства, где <имя проекта> — это имя проекта (AppLogger в этом случае).

  2. Разверните узел пакета, выберите Общие, а затем выберите Создать пакет NuGet для сборки.

    снимок экрана со свойствами пакета, где выбран параметр

Примечание

При автоматическом создании пакета дополнительное время на упаковку увеличивает общее время сборки вашего проекта.

(Необязательно) Упаковать с помощью MSBuild

В качестве альтернативы использованию команды меню пакета NuGet 4.x+ и MSBuild 15.1+ поддерживает целевой объект pack, если проект содержит необходимые данные пакета:

  1. Откройте проект в обозревателе решений , затем откройте командную строку, выбрав Сервис,>,Командная строка,>,Командная строка разработчика.

    Командная строка открывается в каталоге проекта.

  2. Выполните следующую команду: 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:

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

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

  3. Выберите Создатьи укажите имя ключа.

  4. В разделе Выбор областейвыберите Push.

  5. В разделе "Выбор пакетов">укажите шаблон globи введите *.

  6. Выберите Создать.

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

    снимок экрана, на котором показан новый ключ API со ссылкой

Важно!

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

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

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

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

Публикация с помощью интерфейса командной строки .NET или Интерфейса командной строки NuGet

Каждый из следующих средств ИНТЕРФЕЙСА командной строки позволяет отправлять пакет на сервер и публиковать его. Выберите вкладку для вашего CLI-инструмента: .NET CLI или NuGet CLI.

Использование .NET CLI (dotnet.exe) является рекомендуемой альтернативой использованию интерфейса командной строки NuGet.

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

Интерфейс командной строки.NET
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.org.

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

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

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

    снимок экрана, на котором показан значок

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

    снимок экрана, показывающий снятие флажка

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

Примечание

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

Добавьте readme или другой файл

Чтобы напрямую указать файлы для включения в пакет, измените файл проекта и добавьте свойство content:

XML
<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 должен предложить, см. в следующих статьях: