Quiero ejecutar un repositorio NuGet local / interno . Creo que he descubierto cómo "reutilizar" los paquetes NuGet existentes incluyéndolos en un proyecto ficticio usando NuGet y escaneando el archivo del paquete para capturar mis .nupkg
archivos almacenados en caché local , pero ...
¿Cómo se crea un paquete nuget ( .nupkg
) a partir de un proyecto, que incluye automáticamente todas las dll
dependencias y no solo las capturadas a través de NuGet?
Específicamente:
- Crea una solución
- Agregar un nuevo proyecto
- Agregue referencias a varios
.dll
archivos / otros proyectos <- esta es la parte que falta - Agregue paquetes NuGet a través del administrador de paquetes / cmdline / lo que sea
- algo crea automáticamente el
.nupkg
Por lo que he encontrado, se supone que debes hacer cosas como
- edite manualmente su
.csproj
archivo para agregarlo<BuildPackage>true</BuildPackage>
para incluir dependencias - cree manualmente un
.nuspec
archivo y enumere manualmente sus dependencias ( ¿similar? ) - ejecutar manualmente
nuget pack
en su.nuspec
archivo
Pero todo es manual, lo cual es una estupidez. Incluso las soluciones semiautomáticas siguen siendo incómodas o medio manuales:
- Cree
.nuspec
plantillas : no parece incluir dependencias, solo metadatos nuget pack a través de build-event (paso # 5), que debe 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 .nuspec
manifiesto a partir de las referencias del proyecto. Entonces, teóricamente, + el evento de compilación de nuget se puede acumular en un paquete de proyecto de compilación / nuget, que es lo que realmente quiero ver.
Respuestas:
Su punto # 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 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:
Si hace
projectfile.csproj
referencia a otros proyectos de su solución que también se exponen 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 NuGet (internos) 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.
fuente
.nuspec
, que creo que es lo que está sugiriendo.nuspec
que incluya todo en elbin
directorio (asumiendo mis referencias son todos "copia local"), automáticamente recogerá todo lo que haya agregado. Parece un poco torpe, pero probablemente funcionaría.<file src="bin\release\*.dll" target="lib" />
Para otros Googlers, puede usar esto si está usando el archivo NuGet.targets para ejecutar NuGet Pack:
fuente
¡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 Paquete Nuget Paquete NuGet
Entonces estás agregando proyectos interesantes a las 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. NuSpec y nupkg generados estarán en la carpeta obj de su nuevo proyecto. Espero que ayude ;).
fuente
Encontré un artículo bien escrito sobre este tema. Tengo el mismo problema con ciertos paquetes que tienen una jerarquía de dependencias y hasta ahora he estado cargando cada uno como un paquete NuGet separado (lo que es una pérdida de tiempo).
Acabo de probar la solución que se encuentra aquí: https://dev.to/wabbbit/include-both-nuget-package-references-and-project-reference-dll-using-dotnet-pack-2d8p
Y después de examinar el paquete NuGet mediante el Explorador de paquetes NuGet, las DLL producidas por los proyectos referenciados están presentes. Voy a probar enviando este paquete a NuGet y probándolo.
Aquí está mi fuente en caso de que sea útil para usted: https://github.com/jchristn/NuGetPackTest
Y el paquete de prueba de NuGet: https://www.nuget.org/packages/NuGetPackTest/1.0.0
La solución parece funcionar bien. No sé cómo se verá cuando haya capas de referencias, estoy seguro de que podría volverse muy complicado y muy rápido.
.csproj de la biblioteca NuGetPackTest que hace referencia al proyecto TestLibrary (partes eliminadas por brevedad)
fuente