Создание пакета NuGet с помощью dotnet CLI
Пакеты NuGet содержат код, который разработчики могут повторно использовать в своих проектах. Независимо от того, что ваш код делает или содержит, используйте средство командной строки либо nuget.exe
dotnet.exe
для создания пакета NuGet.
В этой статье описывается, как создать пакет с помощью dotnet CLI. Начиная с Visual Studio 2017, интерфейс командной строки dotnet включается во все рабочие нагрузки .NET и .NET Core. Если вам нужно установить dotnet CLI или другие клиентские средства NuGet, см. статью "Установка клиентских средств NuGet".
Этот раздел относится только к .NET и другим проектам, используюющим формат стиля ПАКЕТА SDK. Для этих проектов NuGet использует сведения из файла проекта для создания пакета. Краткие руководства см. в статье "Создание пакетов с помощью dotnet CLI " или "Создание пакетов с помощью Visual Studio".
Команда MSBuild msbuild -t:pack функционально эквивалентна пакету dotnet. Дополнительные сведения о создании пакета с помощью MSBuild см. в статье "Создание пакета NuGet с помощью MSBuild".
Примечание.
Сведения о создании и публикации пакетов для проектов, не относящихся к пакету SDK, обычно платформа .NET Framework проектам, см. в статье "Создание пакета с помощью интерфейса командной строки nuget.exe" или "Создание и публикация пакета с помощью Visual Studio (платформа .NET Framework)".
Для проектов, перенесенных из packages.config в PackageReference, используйте
msbuild -t:pack
. Дополнительные сведения см. в разделе "Создание пакета после миграции".
Задание свойств
Вы можете создать пример проекта библиотеки классов с помощью dotnet new classlib
команды и упаковить проект с помощью dotnet pack
команды. Команда dotnet pack
использует следующие свойства. Если значения в файле проекта не указаны, команда использует значения по умолчанию.
PackageId
Идентификатор пакета должен быть уникальным в nuget.org и любых других целевых объектах, в которых размещен пакет. Если не указать значение, команда использует этуAssemblyName
команду.Version
— это определенный номер версии в формеMajor.Minor.Patch[-Suffix]
, где-Suffix
определяются предварительные версии. Если не задано, по умолчанию используется значение1.0.0
.Authors
являются авторами пакета. Если не указано, значение по умолчанию — этоAssemblyName
значение.Company
— это сведения о компании. Если значение не указано, значение по умолчанию —Authors
это значение.Product
— это сведения о продукте. Если не указано, значение по умолчанию — этоAssemblyName
значение.
В Visual Studio эти значения можно задать в свойствах проекта. Щелкните проект правой кнопкой мыши в Обозреватель решений, выберите "Свойства" и выберите раздел "Пакет". Вы также можете добавить свойства непосредственно в CSPROJ или другой файл проекта.
В следующем примере показан файл проекта с добавленными свойствами пакета.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<PackageId>UniqueID</PackageId>
<Version>1.0.0</Version>
<Authors>Author Name</Authors>
<Company>Company Name</Company>
<Product>Product Name</Product>
</PropertyGroup>
</Project>
Можно добавить другие необязательные свойства, например Title
, PackageDescription
и PackageTags
.
Примечание.
Для пакетов, которые вы создаете для общедоступного потребления, обратите особое внимание на PackageTags
свойство. Теги помогают другим пользователям найти пакет и понять, что это делает.
Команда dotnet pack
автоматически преобразует PackageReference
файлы проекта в зависимости в созданном пакете. Вы можете контролировать, какие ресурсы следует включить с помощью IncludeAssets
ExcludeAssets
тегов и PrivateAssets
тегов. Дополнительные сведения см. в разделе Управление ресурсами зависимостей.
Дополнительные сведения о зависимостях, необязательных свойствах и использовании версий см. в следующем разделе:
- Ссылки на пакеты в файлах проекта
- Управление версиями пакета
- Свойства метаданных NuGet
- Целевые объекты пакета MSBuild
Выбор уникального идентификатора пакета и номера версии
Идентификатор пакета и номер версии однозначно определяют точный код, содержащийся в пакете.
Чтобы создать идентификатор пакета, выполните следующие рекомендации.
Идентификатор должен быть уникальным в nuget.org и во всех других расположениях, в которых размещен пакет. Чтобы избежать конфликтов, рекомендуется использовать имя вашей компании в качестве первой части идентификатора.
Следуйте соглашению об именовании в виде пространства имен .NET, используя нотацию точек. Например, используйте идентификатор
Contoso.Utility.UsefulStuff
вместоContoso-Utility-UsefulStuff
илиContoso_Utility_UsefulStuff
. Это также полезно для потребителей, если вы соответствуете идентификатору пакета с пространством имен, который использует код.Если вы создаете пакет примера кода, демонстрирующий использование другого пакета , добавьте
.Sample
его к идентификатору, как показано вContoso.Utility.UsefulStuff.Sample
.Пример пакета зависит от исходного пакета. При создании примера пакета добавьте
<IncludeAssets>
contentFiles
значение. В папке содержимого упорядочение примера кода в папке с именем \Samples\<identifier>, например \Samples\Contoso.Utility.UsefulStuff.Sample.
Чтобы задать версию пакета, выполните следующие рекомендации.
Как правило, задайте версию пакета для соответствия версии проекта или сборки, хотя это не обязательно. Сопоставление версии просто при ограничении пакета на одну сборку. Сам NuGet относится к версиям пакетов при разрешении зависимостей, а не версий сборок.
Если вы используете нестандартную схему версий, обязательно рассмотрите правила управления версиями NuGet, как описано в разделе "Управление версиями пакетов". NuGet в основном соответствует семантической версии 2.0.0.
Примечание.
Дополнительные сведения о разрешении зависимостей см. в разделе "Разрешение зависимостей" с помощью PackageReference. Сведения, которые помогут вам понять управление версиями, см. в этой серии записей блога:
Добавление необязательного поля описания
Необязательное описание пакета отображается на вкладке README страницы nuget.org пакета. Описание извлекает из <Description>
файла проекта или $description
в nuspec-файле.
В следующем примере показан Description
файл CSPROJ для пакета .NET:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<PackageId>Azure.Storage.Blobs</PackageId>
<Version>12.4.0</Version>
<PackageTags>Microsoft Azure Storage Blobs;Microsoft;Azure;Blobs;Blob;Storage;StorageScalable</PackageTags>
<Description>
This client library enables working with the Microsoft Azure Storage Blob service for storing binary and text data.
For this release see notes - https://github.com/Azure/azure-sdk-for-net/blob/master/sdk/storage/Azure.Storage.Blobs/README.md and https://github.com/Azure/azure-sdk-for-net/blob/master/sdk/storage/Azure.Storage.Blobs/CHANGELOG.md
in addition to the breaking changes https://github.com/Azure/azure-sdk-for-net/blob/master/sdk/storage/Azure.Storage.Blobs/BreakingChanges.txt
Microsoft Azure Storage quickstarts and tutorials - https://learn.microsoft.com/azure/storage/
Microsoft Azure Storage REST API Reference - https://learn.microsoft.com/rest/api/storageservices/
REST API Reference for Blob Service - https://learn.microsoft.com/rest/api/storageservices/blob-service-rest-api
</Description>
</PropertyGroup>
</Project>
Выполнение команды pack
Чтобы создать пакет NuGet или NUPKG-файл , выполните команду dotnet pack из папки проекта, которая также автоматически создает проект.
dotnet pack
В выходных данных показан путь к NUPKG-файлу:
MSBuild version 17.3.0+92e077650 for .NET
Determining projects to restore...
Restored D:\proj\AppLoggerNet\AppLogger\AppLogger.csproj (in 97 ms).
Successfully created package 'D:\proj\AppLoggerNet\AppLogger\bin\Debug\AppLogger.1.0.0.nupkg'.
Автоматическое создание пакета при сборке
Чтобы автоматически выполняться при каждом запуске dotnet pack
dotnet build
, добавьте следующую строку в файл проекта в <PropertyGroup>
теге:
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
Примечание.
При автоматическом создании пакета упаковка увеличивает время сборки проекта.
При выполнении dotnet pack
пакета решений все проекты в решении, которые можно упаковать, то есть имеет IsPackable
значение true
свойства.
Тестирование установки пакета
Перед публикацией пакета необходимо проверить установку пакета в проект. Тестирование гарантирует, что необходимые файлы в конечном итоге будут в нужных местах в проекте.
Протестируйте установку вручную в Visual Studio или в командной строке с помощью обычного процесса установки пакета.
Внимание
Не удается изменить пакеты после создания. При исправлении проблемы измените содержимое пакета и перепакуйте его.
После повторного создания пакета повторное тестирование по-прежнему использует старую версию пакета, пока не очистите папку глобальных пакетов. Очистка папки особенно важна для пакетов, которые не используют уникальную метку предварительной версии для каждой сборки.
Следующие шаги
После создания пакета вы можете опубликовать NUPKG-файл в выбранном узле.
См. следующие статьи о способах расширения возможностей пакета или поддержки других сценариев:
- Управление версиями пакета
- Поддержка нескольких целевых платформ
- Добавление значка пакета
- Преобразования исходных файлов и файлов конфигурации
- Локализация
- Предварительные версии
- Определение типа пакета
- Использование файлов .props и .targets в MSBuild
- Создание пакетов, содержащих сборки COM-взаимодействия
- Создание собственных пакетов
- Создание пакетов символов (SNUPKG)