Creación de un paquete NuGet con la CLI de dotnet
Los paquetes NuGet contienen código que los desarrolladores pueden reutilizar en sus proyectos. Independientemente de lo que haga o contenga el código, use una herramienta de línea de comandos, ya sea nuget.exe
o dotnet.exe
, para crear el paquete NuGet.
En este artículo se describe cómo crear un paquete mediante la CLI de dotnet. A partir de Visual Studio 2017, la CLI de dotnet se incluye con todas las cargas de trabajo de .NET y .NET Core. Si necesita instalar la CLI de dotnet u otras herramientas cliente de NuGet, consulte Instalar herramientas cliente de NuGet.
Este tema se aplica únicamente a proyectos .NET y otros proyectos que utilizan el formato estilo SDK. Para estos proyectos, NuGet utiliza información del archivo de proyecto con el fin de crear un paquete. Si desea ver tutoriales de inicio rápido, consulte Crear paquetes con la CLI de dotnet o Crear paquetes con Visual Studio.
El comando msbuild -t:pack de MSBuild es funcionalmente equivalente a dotnet pack. Para más información sobre cómo crear un paquete con MSBuild, consulte Crear un paquete NuGet con MSBuild.
Nota:
Si desea crear y publicar paquetes para proyectos que no sean del estilo SDK, normalmente proyectos de .NET Framework, consulte Crear un paquete mediante la CLI de nuget.exe o Crear y publicar un paquete mediante Visual Studio (.NET Framework).
Para proyectos migrados de packages.config a PackageReference, utilice
msbuild -t:pack
. Más información en Crear un paquete después de la migración.
Establecimiento de las propiedades
Puede crear un proyecto de biblioteca de clases de ejemplo con el comando dotnet new classlib
y empaquetar el proyecto con dotnet pack
. El comando dotnet pack
utiliza las siguientes propiedades Si no especifica valores en el archivo de proyecto, el comando utiliza valores predeterminados.
PackageId
, el identificador del paquete, debe ser único en nuget.org y en cualquier otro destino que aloje el paquete. Si no se especifica un valor, el comando utilizaAssemblyName
.Version
es un número de versión específico en la formaMajor.Minor.Patch[-Suffix]
, donde-Suffix
identifica las versiones preliminares. Si no se especifica, el valor predeterminado es1.0.0
.Authors
son los autores del paquete. Si no se especifica, el valor predeterminado esAssemblyName
.Company
es la información sobre la compañía. Si no se especifica, el valor predeterminado esAuthors
.Product
es la información del producto. Si no se especifica, el valor predeterminado esAssemblyName
.
En Visual Studio, puede establecer estos valores en las propiedades del proyecto. Haga clic con el botón derecho en el proyecto en el Explorador de soluciones, seleccione Propiedades y, a continuación, seleccione la sección Paquete. También puede añadir las propiedades directamente al archivo .csproj u otro archivo de proyecto.
El siguiente ejemplo muestra un archivo de proyecto con propiedades de paquete añadidas.
<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>
Puede agregar otras propiedades opcionales, como Title
, PackageDescription
y PackageTags
.
Nota:
En el caso de los paquetes que cree para el consumo público, preste especial atención a la propiedad PackageTags
. Las etiquetas ayudan a otros a encontrar su paquete y entender lo que hace.
El comando dotnet pack
convierte automáticamente PackageReference
en sus archivos de proyecto a dependencias en el paquete creado. Puede controlar qué activos incluir mediante las etiquetas IncludeAssets
, ExcludeAssets
, PrivateAssets
. Para obtener más información, consulte Controlar los recursos de dependencias.
Para más información sobre dependencias, propiedades opcionales y versionado, consulte:
- Referencias de paquete en archivos de proyecto
- Control de versiones del paquete
- Propiedades de metadatos de NuGet
- Objetivos de paquetes MSBuild
Elección de un identificador de paquete único y establecimiento del número de versión
El identificador del paquete y el número de versión identifican de forma exclusiva el código exacto que contiene el paquete.
Siga estos procedimientos recomendados para crear el identificador del paquete:
El identificador debe ser único en nuget.org y en todas las demás ubicaciones que hospeden el paquete. Para evitar conflictos, una buena pauta es utilizar el nombre de su empresa como primera parte del identificador.
Siga una convención de nomenclatura similar a la de los espacios de nombres .NET, en la que se utilice la notación por puntos. Por ejemplo, use
Contoso.Utility.UsefulStuff
en lugar deContoso-Utility-UsefulStuff
oContoso_Utility_UsefulStuff
. También es útil para los consumidores que el identificador del paquete coincida con el espacio de nombres que utiliza el código.Si produce un paquete de código de ejemplo que demuestre cómo utilizar otro paquete, añada
.Sample
al identificador, como enContoso.Utility.UsefulStuff.Sample
.El paquete de ejemplo depende del paquete original. Al crear el paquete de muestra, añada
<IncludeAssets>
con el valorcontentFiles
. En la carpeta de contenido, organice el código de ejemplo en una carpeta llamada \Muestras<identificador>, como \MuestrasContoso.Utilidad.UsefulStuff.Sample.
Siga este procedimiento recomendado para establecer la versión del paquete:
En general, establezca la versión del paquete para que coincida con la versión del proyecto o ensamblado, aunque esto no es estrictamente necesario. Hacer coincidir la versión es sencillo cuando se limita un paquete a un único ensamblado. El propio NuGet se ocupa de las versiones de los paquetes al resolver las dependencias, no de las versiones de los ensamblados.
Si utiliza un esquema de versión no estándar, asegúrese de tener en cuenta las reglas de control de versiones de NuGet como se explica en Control de versiones de paquetes. NuGet es principalmente compatible con el Versionamiento Semántico 2.0.0.
Nota:
Para más información sobre la resolución de dependencias, consulte Resolución de dependencias con PackageReference. Si desea información que le ayude a entender el versionado, consulte esta serie de entradas de blog:
- Part 1: Taking on DLL Hell (Parte 1: Enfrentarse al infierno de los archivos DLL)
- Part 2: The core algorithm (Parte 2: El algoritmo básico)
- Parte 3: Unificación mediante redireccionamiento de enlace
Adición de un campo opcional de descripción
La descripción opcional del paquete aparece en la pestaña LÉAME de la página nuget.org del paquete. La descripción se extrae de <Description>
en el archivo de proyecto o de $description
en el archivo .nuspec.
El siguiente ejemplo muestra una Description
en el archivo .csproj para un paquete .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>
Ejecutar el comando pack
Para compilar el paquete NuGet o el archivo .nupkg, ejecute el comando dotnet pack desde la carpeta del proyecto, que también compila el proyecto automáticamente.
dotnet pack
El resultado muestra la ruta al archivo .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'.
Generación automática del paquete en la compilación
Para ejecutar dotnet pack
automáticamente cada vez que ejecute dotnet build
, agrega la siguiente línea al archivo de proyecto en la etiqueta <PropertyGroup>
:
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
Nota:
Al generar de forma automática el paquete, el empaquetado aumenta el tiempo de compilación del proyecto.
Al ejecutar dotnet pack
en una solución se empaquetan todos los proyectos de la solución que son empaquetables, es decir, que tienen la propiedad IsPackable
establecida en true
.
Prueba de instalación del paquete
Antes de publicar un paquete, debe probar su instalación en un proyecto. Las pruebas garantizan que los archivos necesarios se encuentren en el lugar correcto del proyecto.
Pruebe la instalación manualmente en Visual Studio o en la línea de comandos mediante el proceso normal de instalación de paquetes.
Importante
No se pueden modificar los paquetes una vez creados. Si corrige un problema, cambie el contenido del paquete y vuelva a empaquetarlo.
Después de volver a crear el paquete, las pruebas seguirán utilizando la versión antigua del paquete hasta que borre la carpeta global de paquetes. Borrar la carpeta es especialmente importante para los paquetes que no utilizan una etiqueta única de versión preliminar en cada compilación.
Pasos siguientes
Una vez creado el paquete, puede publicar el archivo .nupkg en el host de su elección.
Consulte los siguientes artículos para saber cómo ampliar las capacidades de su paquete o dar soporte a otros escenarios:
- Control de versiones del paquete
- Compatibilidad con varias plataformas de destino
- Icono de adición de un paquete
- Transformaciones de archivos de origen y configuración
- Localización
- Versiones preliminares
- Definición del tipo de paquete
- Propiedades y destinos de MSBuild
- Creación de paquetes con ensamblados de interoperabilidad COM
- Creación de un paquete nativo
- Creación de paquetes de símbolos (.snupkg)