2011-09-20 23 views
38

Digamos que tengo un proyecto con esta estructura:Crear Nuget paquete con múltiples archivos DLL

MyLibrary\ 
    MyLibrary.sln 
    MyLibrary.Core\ 
    MyLibrary.Core.csproj 
    MyLibrary.Extensions\ 
    MyLibrary.Extensions.csproj 
    MyLibrary.Tests\ 
    MyLibrary.Tests.csproj 

Quiero crear un solo paquete NuGet qué paquetes 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/conjuntos? ¿Hay algún tutorial que se enfoque en esto? Los tutoriales que he encontrado se centran en demostraciones sencillas de proyectos únicos.

Respuesta

2

¿Has probado NuGet Package Explorer? Podría ser la manera más fácil:

http://nuget.codeplex.com/releases/view/59864

+0

+1 - Después de probar más métodos "manuales", esta herramienta finalmente me permitió hacer un paquete completo, así que lo recomendaría también. – Dib

18

Did generar un archivo nuspec blanco con:

nuget spec 

Si utiliza ese archivo y luego poner los archivos DLL en una carpeta bajo nombró lib, se los empacará.

Tuve un pequeño problema al intentar 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 desde dlls o proyectos.

Además, si usted está tratando de ejecutar esto desde un script de construcción que se ejecuta en una carpeta diferente, se puede decir Nuget la ubicación de la carpeta \ lib a través de la línea de comandos -BasePath:.

build\nuget.exe pack nuget\Company.Project.nuspec -BasePath nuget\ 
+0

Gracias. Creo que el conmutador BasePath me permitirá obtener lo que busco. – RationalGeek

+0

Esto funcionó para mí. – mhvelplund

35

Ejecutará NuGet en un único proyecto (o archivo nuspec), pero admite punteros a otros proyectos a través del file element. Este elemento usa los nombres de las referencias de su proyecto, por lo que evita tener que a) buscar la ubicación de otros archivos de proyecto, yb) copiar archivos en un lugar en particular como un paso posterior a la construcción.

Suponiendo que tiene un archivo nuspec para MyLibrary.Core.csproj, y hace referencia MyLibrary.Extensions y MyLibrary.Tests tal que terminan en el directorio bin después de una construcció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 deben 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.

+11

No es necesario codificar el "Release", puede reemplazarlo por "$ configuration $". La razón por la que puede hacerlo es porque los parámetros de MSBuild están disponibles cuando se construye nupkg. A menos que, por supuesto, no use MSBuild para hacer paquetes. – niaher

1

Recientemente publiqué una solución para esto ...

Mi solución permite la creación automática de paquetes NuGet al construir la solución donde cada paquete puede contener múltiples ensambles, referencias a NuGets externos y NuGets creados durante la misma compilación e incluso incluir 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 un walk-through guide here y el source code + binary here.

+0

El enlace a la guía está abajo ... –

+0

@Stefan ha corregido el enlace –

1

tengo un poco de tutorial de cómo lo hice con las ventanas y Visual Studio:

crear una carpeta local y lo llaman paquetes como: c:/lib paquetes // - importante crear otra carpeta en la carpeta lib y llamarlo pasado allí dll.

paquete

Nuget abierta explorador - https://npe.codeplex.com/downloads/get/clickOnce/NuGetPackageExplorer.application

la interfaz de usuario muy intuitiva sólo tiene que añadir DLL y exportarlo a/lib (para tutoría https://blog.zwezdin.com/2014/building-nuget-packages-with-gui-tool/ en ruso, pero ver en imágenes el flujo es de unos 3 clics)

se creará archivo nuspec

BASH GIT abierta - https://git-for-windows.github.io/ y vaya a: cd c: => CD de paquetes (el camino de)

* tal vez en windows necesitará proporcionar desarrollador opciones para cosas Linux de ventanas (https://www.howtogeek.com/249966/how-to-install-and-use-the-linux-bash-shell-on-windows-10/)

en BASH GIT entran comando: Nuget añadir -source [opciones]

donde:: el nombre completo de nuspec (incluye .nuspec)

y: el camino lib de la carpeta en la carpeta (C:/paquetes // lib)

después de la acción terminó con éxito

en BASH GIT introducir otro comando:

nuget pack .nuspec

No en esta carpeta tiene el archivo .nupkg.

How to install a Nuget Package .nupkg file locally? - tutorial de cómo agregarlo al estudio visual.

0

Tuve el mismo problema y decidí crear Nuget que permitirá crear otros nugets del proyecto elegido.

El paquete se implementa en el Nuget.org site. Después de hacer referencia al proyecto, debe agregar el archivo nuspeck a los proyectos que deben generar los proyectos.

Project with the required nuspeck file

Lo último que se debe hacer por usted es invocar comando Crear-Nuspec en Administrador de paquetes. 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.

Cuestiones relacionadas