Краткое руководство. Создание и публикация пакета NuGet с помощью Visual Studio (только Для Windows)

С помощью Microsoft Visual Studio можно создать пакет NuGet из библиотеки классов .NET, а затем опубликовать его в nuget.org с помощью средства КОМАНДНОй строки.

Краткое руководство предназначено только для пользователей Windows. Если вы используете Visual Studio для Mac, см. статью "Создание пакета NuGet из существующих проектов библиотеки" или использование .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. В противном случае установите пакет SDK для .NET Core, чтобы получить интерфейс командной строки .NET. Интерфейс командной строки .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, так как библиотека классов шаблонов достаточно для создания пакета. Тем не менее, если вы хотите использовать некоторый функциональный код для пакета, добавьте следующий код:

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

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

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

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

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

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

    Screenshot showing NuGet package properties in a Visual Studio project.

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

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

    Внимание

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

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

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

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

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

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

  1. Выберите Build >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" в сборке.

    Screenshot showing package properties with Generate NuGet package on build selected.

Примечание.

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

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

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

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

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

  2. Выполните следующую команду: msbuild -t:pack.

Дополнительные сведения см. в разделе Создание пакета с помощью MSBuild.

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

После создания NUPKG-файла опубликуйте его в nuget.org с помощью .NET CLI или интерфейса командной строки NuGet, а также ключа API, полученного из nuget.org.

Примечание.

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

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

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

Перед публикацией пакета NuGet создайте ключ API:

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

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

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

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

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

  6. Нажмите кнопку создания.

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

    Screenshot that shows the new API key with the Copy link.

Внимание

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

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

С помощью области можно создавать ключи 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 выберите имя пользователя в правом верхнем углу и нажмите кнопку "Управление пакетами".

Примечание.

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

Screenshot showing the publishing message that's displayed when you upload a package to nuget.org.

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

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

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

    Screenshot that shows the Edit icon for a package listing on nuget.org.

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

    Screenshot that shows clearing the List checkbox for a package on nuget.org.

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

Примечание.

Чтобы избежать трансляции тестового пакета на nuget.org, вы можете отправиться на сайт https://int.nugettest.orgтестирования nuget.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 с помощью платформа .NET Framework Visual Studio.

Дополнительные сведения о том, что NuGet должен предложить, см. в следующих статьях: