visual-studio - color - visual studio code orthography
Build NuGet Package automáticamente incluyendo dependencias referenciadas (3)
Quiero ejecutar un repositorio NuGet local / interno . Creo que he descubierto cómo "reutilizar" los paquetes existentes de NuGet incluyéndolos en un proyecto ficticio usando NuGet y escaneando el archivo del paquete para tomar mis archivos .nupkg
caché .nupkg
, pero ...
¿Cómo se crea un paquete nuget ( .nupkg
) de un proyecto, que incluye automáticamente todas las dependencias dll
y no solo las que se obtienen a través de NuGet?
Específicamente:
- Crea una solución
- Agregar un nuevo proyecto
- Agregue referencias a varios archivos
.dll
/ otros proyectos <- esta es la parte que falta - Agregue paquetes NuGet a través del administrador de paquetes / cmdline / whatever
- algo crea automáticamente
.nupkg
Por lo que he encontrado, se supone que debes hacer cosas como
- edite manualmente su archivo
.csproj
para agregar<BuildPackage>true</BuildPackage>
para incluir dependencias - crear manualmente un archivo
.nuspec
y listar manualmente sus dependencias ( ¿similar? ) - ejecute manualmente el
nuget pack
en su archivo.nuspec
Pero todo es manual, lo cual es estúpido. Incluso las soluciones semiautomáticas siguen siendo torpes o medio manuales:
- Crear plantillas
.nuspec
: no parece incluir dependencias, solo metadatos paquete nuget a través de build-event (paso # 5), que necesita agregar manualmente a cada proyecto, y tiene sus propias peculiaridades :
"$(SolutionDir).nuget/NuGet.exe" pack "$(ProjectPath)" -Properties Configuration=Release move /Y *.nupkg "$(TargetDir)"
Me conformaré con algo que crea automáticamente un manifiesto .nuspec
partir de las referencias del proyecto. Luego, teóricamente, ese + el evento de compilación nuget se puede enrollar en un paquete de compilación / proyecto nuget, que es lo que realmente quiero ver.
¡Mira esto!
La solución que encontré es una extensión para Visual Studio: https://visualstudiogallery.msdn.microsoft.com/fbe9b9b8-34ae-47b5-a751-cb71a16f7e96/view/Reviews
Simplemente agrega un nuevo proyecto llamado Nuget Package NuGet Package
¡Entonces estás agregando proyectos interesantes a referencias y BOOOM! Todas las dependencias y directorios de archivos se agregan automáticamente. Si desea modificar los datos de NuSpec, haga clic derecho en el proyecto y vaya a Propiedades, luego modifique lo que desee. Generado NuSpec y nupkg estará en la carpeta obj de su nuevo proyecto. Espero que ayude ;).
Para otros Googlers, puede usar esto si está usando el archivo NuGet.targets para ejecutar NuGet Pack:
<Target Name="PrePackage" BeforeTargets="BuildPackage">
<PropertyGroup>
<BuildCommand>$(BuildCommand) -IncludeReferencedProjects</BuildCommand>
</PropertyGroup>
</Target>
Su punto n. ° 3 ( Agregar referencias a varios archivos .dll / otros proyectos <- esta es la parte que falta ) realmente contiene dos problemas diferentes: (1) agregar referencias a varios archivos dll, y (2) agregar referencias a otros proyectos en la misma solución
El número (2) aquí ha recibido un poco de soporte adicional a partir de NuGet 2.5 . Puede agregar una opción para incluir referencias a otros proyectos en la misma solución al crear un paquete NuGet para un proyecto:
nuget pack projectfile.csproj -IncludeReferencedProjects
Si projectfile.csproj
referencia a cualquier otro proyecto en su solución que también esté expuesto como paquetes NuGet, los paquetes NuGet de estos proyectos se agregarán como dependencias. Si hace referencia a proyectos en su solución que no se exponen como paquetes NuGet, sus dlls se incluirán en este paquete NuGet.
En cuanto a (1), si a menudo agrega dlls a sus proyectos que no están disponibles como paquetes NuGet, puede crear sus propios paquetes (internos) NuGet con estos archivos. Si luego agrega estos dlls como un paquete NuGet en lugar de los archivos directamente, este paquete NuGet será una dependencia en el paquete NuGet de su proyecto.