Criar um pacote NuGet com a CLI do dotnet
Os pacotes NuGet contêm código que os desenvolvedores podem reutilizar em seus projetos. Não importa o que seu código faça ou contém, você usa uma ferramenta de linha de comando, nuget.exe
ou dotnet.exe
, para criar o pacote NuGet.
Este artigo descreve como criar um pacote usando a CLI do dotnet. A partir do Visual Studio 2017, a CLI do dotnet está incluída em todas as cargas de trabalho do .NET e .NET Core. Se você precisar instalar a CLI do dotnet ou outras ferramentas de cliente NuGet, consulte Instalar ferramentas de cliente NuGet.
Este tópico se aplica somente ao .NET e a outros projetos que usam o formato estilo SDK. Para esses projetos, o NuGet usa informações do arquivo de projeto para criar um pacote. Para ver tutoriais passo a passo, consulte Criar pacotes com a CLI do dotnet e Criar pacotes com o Visual Studio.
O comando msbuild -t:pack do MSBuild é funcionalmente equivalente ao dotnet pack. Para obter mais informações sobre como criar um pacote com o MSBuild, consulte Criar um pacote NuGet usando o MSBuild.
Observação
Para criar e publicar pacotes para projetos estilo não SDK, geralmente projetos do .NET Framework, consulte Criar um pacote usando a CLI do nuget.exe ou Criar e publicar um pacote usando o Visual Studio (.NET Framework).
Para projetos migrados de packages.config para PackageReference, use
msbuild -t:pack
. Para obter mais informações, consulte Criar um pacote após a migração.
Definir propriedades
Você pode criar um projeto de biblioteca de classes de exemplo usando o comando dotnet new classlib
e empacotar o projeto usando dotnet pack
. O comando dotnet pack
usa as propriedades a seguir. Se você não especificar valores no arquivo de projeto, o comando usará valores padrão.
PackageId
, o identificador do pacote, deve ser exclusivo em nuget.org e em quaisquer outros destinos que hospedam o pacote. Se você não especificar um valor, o comando usará oAssemblyName
.Version
é um número de versão específico no formatoMajor.Minor.Patch[-Suffix]
, onde-Suffix
identifica versões de pré-lançamento. Se esse campo não for especificado, o valor padrão será1.0.0
.Authors
são os autores do pacote. Se esse campo não for especificado, o valor padrão seráAssemblyName
.Company
são informações da empresa Se o valor não for especificado, o valor padrão será o valor deAuthors
.Product
são informações sobre produtos. Se esse campo não for especificado, o valor padrão seráAssemblyName
.
No Visual Studio, você pode definir esses valores nas propriedades do projeto. Clique com o botão direito do mouse no projeto no Gerenciador de Soluções, selecione Propriedades e, em seguida, selecione a seção Pacote. Você também pode adicionar as propriedades diretamente em .csproj ou outro arquivo de projeto.
O exemplo a seguir mostra um arquivo de projeto com propriedades do pacote adicionadas.
<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>
Você pode adicionar outras propriedades opcionais, como Title
, PackageDescription
e PackageTags
.
Observação
Para pacotes que você cria para consumo público, preste atenção especial à propriedade PackageTags
. As tags ajudam outras pessoas a encontrar seu pacote e entender o que ele faz.
O comando dotnet pack
converte automaticamente PackageReference
s em seus arquivos de projeto em dependências no pacote criado. Você pode controlar quais ativos incluir por meio das tags IncludeAssets
, ExcludeAssets
e PrivateAssets
. Para obter mais informações, consulte Controlar ativos de dependências.
Para obter mais informações sobre dependências, propriedades opcionais e controle de versão, consulte:
- Referências de pacotes em arquivos de projeto
- Controle de versão do pacote
- Propriedades de metadados do NuGet
- Destinos de pacotes MSBuild
Escolher um identificador de pacote exclusivo e definir o número de versão
O identificador do pacote e o número de versão identificam de forma exclusiva o código exato que está contido no pacote.
Siga estas práticas recomendadas para criar o identificador do pacote:
O identificador deve ser exclusivo em nuget.org e em todos os outros locais que hospedam o pacote. Para evitar conflitos, um bom padrão é usar o nome da sua empresa como a primeira parte do identificador.
Siga uma convenção de nomenclatura semelhante a namespaces do .NET, usando a notação de pontos. Por exemplo, use
Contoso.Utility.UsefulStuff
em vez deContoso-Utility-UsefulStuff
ouContoso_Utility_UsefulStuff
. Também é útil para os consumidores se você corresponder o identificador do pacote ao namespace usado pelo código.Se você produzir um pacote de código de exemplo que demonstre como usar outro pacote, anexe
.Sample
como um sufixo ao identificador, como emContoso.Utility.UsefulStuff.Sample
.O pacote de exemplo tem uma dependência do pacote original. Ao criar o pacote de exemplo, adicione
<IncludeAssets>
com o valorcontentFiles
. Na pasta content, organize o código de exemplo em uma pasta chamada \Samples\<identificador>, como \Samples\Contoso.Utility.UsefulStuff.Sample.
Siga estas melhores práticas para definir a versão do pacote:
Em geral, defina a versão do pacote para corresponder à versão do projeto ou assembly, embora isso não seja estritamente necessário. Igualar a versão é uma questão simples quando você limita um pacote a um único assembly. O NuGet em si lida com versões do pacote ao resolver as dependências, não versões de assembly.
Ao usar um esquema de versão não padrão, considere as regras de controle de versão do NuGet, conforme explicado em Controle de versão de pacotes. O NuGet é em grande parte compatível com o Controle de Versão Semântico 2.0.0.
Observação
Para obter mais informações sobre a resolução de dependências, confira Resolução de dependências com PackageReference. Para obter informações que podem ajudar a entender o controle de versão, confira esta série de postagens no blog.
Adicionar um campo de descrição opcional
A descrição opcional do pacote aparece na guia LEIAME da página nuget.org do pacote. A descrição é transferida do <Description>
no arquivo de projeto ou do $description
no arquivo .nuspec.
O exemplo a seguir mostra um Description
no arquivo .csproj para um pacote .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>
Executar o comando pack
Para compilar um pacote do NuGet ou arquivo .nupkg, execute o comando dotnet pack da pasta do projeto, que também compila o projeto automaticamente.
dotnet pack
A saída mostra o caminho até o arquivo .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'.
Gerar pacote automaticamente no build
Para executar dotnet pack
automaticamente sempre que você executar dotnet build
, adicione a seguinte linha ao arquivo de projeto na tag <PropertyGroup>
:
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
Observação
Quando o pacote é gerado automaticamente, o empacotamento aumenta o tempo de compilação do seu projeto.
Executar dotnet pack
em uma soluçãoempacota todos os projetos na solução que são empacotáveis, ou sejam que têm a propriedade IsPackable
definida como true
.
Instalação do pacote de teste
Antes de publicar um pacote, você deve testar a instalação do pacote em um projeto. Testar garante que os arquivos todos terminem em seus lugares corretos no projeto.
Teste a instalação manualmente no Visual Studio ou na linha de comando usando as etapas normais de instalação do pacote.
Importante
Não é possível alterar pacotes depois de criados. Se você corrigir um problema, altere o conteúdo do pacote e refaça o pacote
Após o pacote ser recriado, o novo teste ainda usa a versão antiga do pacote até que você limpe a pasta de pacotes globais. Limpar a pasta é especialmente importante para pacotes que não usam um rótulo de pré-lançamento exclusivo em cada compilação.
Próximas etapas
Depois de criar o pacote, você pode publicar o arquivo .nupkg no host de sua escolha.
Consulte os seguintes artigos para obter maneiras de estender os recursos do seu pacote ou oferecer suporte a outros cenários:
- Controle de versão do pacote
- Suporte a várias estruturas de destino
- Adicionar ícone de pacote
- Transformações dos arquivos de configuração e de origem
- Localização
- Versões de pré-lançamento
- Definir tipo de pacote
- Objetos e destinos do MSBuild
- Criar pacotes com assemblies de interoperabilidade COM
- Criar pacotes nativos
- Criar pacotes de símbolos (.snupkg)