c# - studio - Diferencias entre nuget-packing a csproj vs. nuspec
nupkg (4)
Aquí hay un hecho poco conocido: ¡puedes combinar ambos ! Oriente un archivo csproj y asegúrese de que haya un archivo nuspec en el mismo directorio con el mismo nombre que el archivo csproj. NuGet fusionará los dos durante la creación del paquete.
En resumen: target <ProjectName>.csproj
, opcionalmente agregue un archivo tokenized <ProjectName>.nuspec
para ser utilizado como metadato por NuGet.exe.
Le ahorra administrar la ubicación de salida, las dependencias, la versión y otras cosas que pueden derivarse del proyecto.
Recientemente, comencé a empacar paquetes Nuget de mis varios proyectos. Primero comencé con la aplicación Package Explorer. Es una buena herramienta, pero es menos útil si realiza una integración continua. Luego investigué especificando el archivo de plantilla nuspec , y pasando los datos cambiantes, por ejemplo, el número de versión, como argumentos de línea de comando. Más tarde, me pregunté cómo definir las dependencias del paquete nuget. Como resultado, el nuget.exe ya hace esto basado en el paquete.config si especifica un csproj . Además, extrae datos relevantes como Autor, Versión, Derechos de Autor desde la información del conjunto. Lo que me falta ahora es la capacidad de especificar una licenseUrl en la línea de comando. Pero quería que la pregunta fuera más genérica. Y entonces estoy preguntando:
¿Cuál es la forma preferida de empaquetar paquetes nuget?
Con .NET Core a partir de febrero de 2018, deberá proporcionar un archivo .nuspec
para más que las propiedades básicas del archivo de especificación.
Pero el comando dotnet pack
no usará el archivo .nuspec
menos que agregue la <NuspecFile>relative path to nuspec</NuspecFile>
al archivo .csproj
.
Con .csproj para Visual Studio 2017, no necesita un archivo .nuspec. En realidad, puede agregar los valores directamente a su csproj y los recuperará.
Haga clic con el botón derecho en el proyecto en Visual Studio, Editar xxxxx.csproj. El bloc de notas funciona bien también.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Version>1.0.1</Version>
<authors>Subtracts</authors>
<TargetFrameworks>netstandard1.6;net452</TargetFrameworks>
<AssemblyName>Checkout.net</AssemblyName>
<PackageId>Checkout.net</PackageId>
...
</Project>
Como no tengo suficiente reputación para comentar, dejo una respuesta en lugar de un comentario sobre la respuesta de Xavier. :)
Para paquetes simples, puede crear directamente los paquetes de .csproj
o .vbproj
. Pero para obtener más paquetes por adelantado, especialmente cuando necesita incorporar archivos personalizados en su paquete, debe usar .nuspec
. Normalmente empiezo con el csproj y me muevo a nuspec según sea necesario. Siempre puedes obtener el nuspec usando el comando nuget spec
en el csproj.
https://docs.nuget.org/create/creating-and-publishing-a-package
Puede especificar cualquiera de las propiedades incluyendo licenseUrl
usando el parámetro Properties
para nuget pack
nuget pack -properties licenseUrl=http://blah