studio - Crear paquete nuget con mĂșltiples DLL
nuget package creator (7)
Digamos que tengo un proyecto con esta estructura:
MyLibrary/
MyLibrary.sln
MyLibrary.Core/
MyLibrary.Core.csproj
MyLibrary.Extensions/
MyLibrary.Extensions.csproj
MyLibrary.Tests/
MyLibrary.Tests.csproj
Quiero crear un único paquete NuGet que empaquete MyLibrary.Core.dll y MyLibrary.Extensions.dll. Parece que no puedo entender cómo hacer que NuGet haga esto. Intenté crear un archivo de especificaciones manualmente y he intentado crear uno con "nuget spec MyLibrary.Core.csproj". He intentado agregar todas las DLL a una lib / folder, que entiendo es el mecanismo basado en la convención para agregar archivos DLL al paquete. En todos los casos, puedo obtener MyLibary.Core.dll para entrar en el paquete, pero MyLibrary.Extensions.dll no termina empaquetado junto con él.
TLDR: ¿Cuál es la mejor práctica para crear un paquete NuGet con múltiples proyectos / ensamblajes? ¿Hay algún tutorial que se enfoque en esto? Los tutoriales que he encontrado se centran en demostraciones sencillas de proyectos únicos.
¿Generaste un archivo nuspec en blanco con:
nuget spec
Si usa ese archivo y luego coloca sus dlls en una carpeta debajo de él llamada lib, los empacará.
Tuve un pequeño problema al tratar de generar un archivo nuspec desde un proyecto o dll. Además, si hace referencia manualmente a cualquier archivo en el archivo nuspec, las convenciones no se utilizan. Este es probablemente el problema con las nuspecs generadas a partir de dlls o proyectos.
Además, si intenta ejecutar esto desde un script de construcción que se ejecuta en una carpeta diferente, puede decirle a nuget la ubicación de su carpeta. / Lib a través de la línea de comando -BasePath:
build/nuget.exe pack nuget/Company.Project.nuspec -BasePath nuget/
¿Has probado NuGet Package Explorer? Podría ser la manera más fácil:
Ejecutará NuGet en un único proyecto (o archivo nuspec), pero admite punteros a otros proyectos a través del elemento de file
. Este elemento utiliza los nombres de las referencias de su proyecto, por lo que evita tener que a) encontrar la ubicación de otros archivos de proyecto, yb) copiar archivos en un lugar determinado como paso posterior a la construcción.
Supongamos que tiene un archivo nuspec para MyLibrary.Core.csproj , y hace referencia a MyLibrary.Extensions y MyLibrary.Tests de manera que terminan en el directorio bin después de una compilación:
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
...
</metadata>
<files>
<file src="bin/Release/MyLibrary.Extensions.dll" target="lib/net40" />
<file src="bin/Release/MyLibrary.Tests.dll" target="lib/net40" />
</files>
</package>
Con esta configuración, todas sus referencias deberían terminar en el lugar apropiado en el paquete NuGet. Todavía tienes el ''Release'' codificado allí, pero apostaría que probablemente no distribuyas paquetes NuGet de sus compilaciones de depuración de todos modos.
Parece que tu problema es el mismo que el de esta pregunta: ¿por qué nuget no incluye el proyecto al que se hace referencia al empacar? . De ser así, puede usar la opción -includereferencedprojects (Ver http://docs.nuget.org/docs/reference/command-line-reference#Pack_Command ).
Recientemente publiqué una solución para esto ...
Mi solución permite la creación automática de paquetes NuGet cuando construyes la solución donde cada paquete puede contener múltiples ensamblajes, referencias a NuGets externos y NuGets creados durante la misma compilación e incluso incluyen el código fuente para la depuración.
En su caso, todo lo que tendrá que hacer es agregar un nuevo proyecto de biblioteca de clases a su solución, hacer referencia a los proyectos que desea empaquetar y luego agregar un evento de compilación posterior.
Puede encontrar un artículo con una guía paso a paso aquí y el código fuente + binario aquí .
Tuve el mismo problema y decidí crear Nuget que permitirá crear otros nugets del proyecto elegido.
El paquete se implementa en el sitio de Nuget.org . Después de hacer referencia al proyecto, debe agregar el archivo nuspeck a los proyectos que deben generar los proyectos.
Proyecto con el archivo nuspeck requerido
Lo último que debe hacer es invocar el comando Create-Nuspec en Package Manager. Después de que el módulo powershell tomará todas las bibliotecas que son el resultado de la construcción, agregará también las dependencias requeridas y creará el nuget en el directorio de salida.
Descripción sobre este paquete se coloca here .
tengo un tutorial de cómo lo hice con Windows y Visual Studio:
crea una carpeta local y llámale paquetes como: c: / packages // lib - importante para crear otra carpeta en la carpeta llamarla lib y pasar alli dll.
abrir el explorador de paquetes nuget - https://npe.codeplex.com/downloads/get/clickOnce/NuGetPackageExplorer.application
la interfaz de usuario muy intuitiva solo agrega dll y exportarlo a / lib (para el tutorial https://blog.zwezdin.com/2014/building-nuget-packages-with-gui-tool/ en ruso, pero ver en las imágenes el flujo es aproximadamente 3 clics)
creará un archivo nuspec
abra GIT BASH - https://git-for-windows.github.io/ y vaya a: cd c: => paquetes de cd (la ruta de)
* tal vez en Windows necesite proporcionar opciones de desarrollador para las cosas de Linux de Windows ( https://www.howtogeek.com/249966/how-to-install-and-use-the-linux-bash-shell-on-windows-10/ )
en GIT BASH ingrese el comando: nuget add -source [opciones]
donde:: el nombre completo de nuspec (include .nuspec)
y: la ruta de la carpeta lib en la carpeta (c: / packages // lib)
después de que la acción terminó exitosamente
en GIT BASH ingrese otro comando:
nuget pack .nuspec
no en esta carpeta tiene el archivo .nupkg.
¿Cómo instalar un paquete Nuget Package .nupkg localmente? - tutorial de cómo agregarlo al estudio visual.