2011-09-02 34 views
15

Actualmente estamos creando una solución con varios proyectos.Crear paquete nuget para una solución con múltiples proyectos

tenemos algo como esto:

- Common 
    - Logging 
    - Logging.NLog 
- Threading 

Así Logging.NLog depende de registro, inicio de sesión común ... etc.

Cuando empaquetamos Logging.NLog Me gustaría que nuget descubra el Loggin y las dependencias comunes.

Por el momento, he creado un paquete con Common, a continuación, en el registro que se instala el paquete común con

install-package Common 

Pero cada vez que hago una modificación en común, tengo que actualizar el paquete y que se crean por nuestro sistema de integración continuo (Hudson), por lo que es bastante molesto cuando estamos desarrollando.

Me gustaría simplemente tener una referencia de proyecto (Agregar referencias -> Proyecto ...) y el nuget descubrir las dependencias de todos modos.

¿Hay alguna manera de lograrlo?

+0

¿Quiere decir que cuando construye un paquete NuGet para el registro, desea que incluya una dependencia del paquete para Common, como Common se incluye en el registro a través de NuGet? –

+0

Posible duplicado de [Creación de un paquete NuGet de múltiples proyectos en una solución] (https://stackoverflow.com/questions/15882770/creating-one-nuget-package-from-multiple-projects-in-one-solution) –

Respuesta

11

Hay una planificada feature dirigidos a este mismo escenario.

Esto es cómo se va a parecer ser:

> nuget.exe pack proj.csproj -IncludeReferencedProjects 

Al parecer, ha sido implemented meros días, pero hay bugsstillbeingironedout.

La característica, en su estado actual, permite:

  • envasado de artefactos varios proyectos en un solo paquete Nuget (caminando proyecto referencias de forma recursiva),

O

  • creando nuget paquete referencias a esos proyectos paquetes asociados, si los proyectos referenciados tienen archivos .nuspec adjuntos.

La solicitud de funciones se remonta hasta el 1.5, pero siguió cayendo. Recientemente, sin embargo, reunió suficiente masa (solicitudes) para programar su lanzamiento en Nuget 2.3.

El plan de lanzamiento incluye la versión 2.3 para "finales de abril de 2013", así que estad atentos.
(Actualmente, la última versión de Nuget es la 2.2.1).

+2

Esto parece funcionar bien como en mi versión (2.5.40416.9020), sin necesidad de elementos o en el archivo .nuspec (proj.nuspec en este ejemplo). –

1

Creo que Charles quiere que NuGet resuelva automáticamente las referencias de proyectos en dependencias de paquetes si dichos proyectos referenciados también se usan para construir paquetes NuGet, ¿verdad?

Ejemplo:

  1. Logging está configurado para generar un paquete NuGet
  2. Logging.Nlog está configurado para generar un paquete NuGet
  3. Logging.Nlog tiene una referencia de proyecto a la tala.
  4. El paquete Logging.Nlog generado debe tener una dependencia en el paquete de registro generado.

Esto es algo que también he estado buscando, pero lamentablemente encontré que actualmente no es compatible. Hay un work item en él, programado para NuGet 1.7, pero aún no hay un diseño sobre cómo manejar esto todavía.

+0

¡Sí, tienes razón! Gracias por la información –

1

Esta discusión tiene una buena sugerencia: NuGet and multiple solutions

Básicamente, romper los componentes comunes a su propia solución, con su propia liberación del ciclo de vida.

1

Actualmente no hay forma de hacer exactamente lo que pide, pero lo siguiente lo ayudará a optimizar sus actualizaciones.

Parece que necesita agregar archivos nuspec a su solución. Algo así como los siguientes tres archivos. Tenga en cuenta las dependencias en los otros dos. Estos se refieren a la misma versión dll como común a través de [$ version $]. Esto significa que cuando ejecuta el siguiente comando, actualiza los tres porque los corchetes en las dependencias requieren una versión específica de los paquetes dependientes.

PM> Actualización de paquete común

En Hudson, tendrá que ejecutar estos archivos nuspec utilizando comandos paquete Nuget (see Nuget command reference) e incluyen los paquetes resultantes en sus artefactos, y desplegarlos a su servidor Nuget local. Te lo dejo a ti.

La otra cosa que tendría que hacer es asegurarse de que todos sus ensamblajes obtengan la misma versión para la misma compilación. De nuevo, Hudson puede encargarse de esto o puede usar un archivo AssemblyInfo común.

Common.nuspec

<?xml version="1.0"?> 
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> 
<metadata> 
    <version>$version$</version> 
    <authors>Charles Ouellet</authors> 
    <owners /> 
    <iconUrl>http://domain/Content/images/LOGO_32x32.png</iconUrl> 
    <id>Common</id> 
    <title>Common</title> 
    <requireLicenseAcceptance>false</requireLicenseAcceptance> 
    <description>full description here</description> 
</metadata> 
<files> 
    <file src="..\Common\bin\Release\Common.dll" target="lib\net40" /> 
    <file src="..\Common\bin\Release\Common.pdb" target="lib\net40" /> 
</files> 
</package> 

Logging.nuspec

<?xml version="1.0"?> 
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> 
<metadata> 
    <version>$version$</version> 
    <authors>Charles Ouellet</authors> 
    <owners /> 
    <iconUrl>http://domain/Content/images/LOGO_32x32.png</iconUrl> 
    <id>Logging</id> 
    <title>Logging</title> 
    <requireLicenseAcceptance>false</requireLicenseAcceptance> 
    <description>full description here</description> 
    <dependencies> 
     <dependency id="Common" version="[$version$]" /> 
    </dependencies>   
</metadata> 
<files> 
    <file src="..\Logging\bin\Release\Logging.dll" target="lib\net40" /> 
    <file src="..\Logging\bin\Release\Logging.pdb" target="lib\net40" /> 
</files> 
</package> 

Logging.NLog

<?xml version="1.0"?> 
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> 
<metadata> 
    <version>$version$</version> 
    <authors>Charles Ouellet</authors> 
    <owners /> 
    <iconUrl>http://domain/Content/images/LOGO_32x32.png</iconUrl> 
    <id>Logging.NLog</id> 
    <title>Logging.NLog</title> 
    <requireLicenseAcceptance>false</requireLicenseAcceptance> 
    <description>full description here</description> 
    <dependencies> 
     <dependency id="Logging" version="[$version$]" /> 
    </dependencies>   
</metadata> 
<files> 
    <file src="..\Logging.NLog\bin\Release\Logging.NLog.dll" target="lib\net40" /> 
    <file src="..\Logging.NLog\bin\Release\Logging.NLog.pdb" target="lib\net40" /> 
</files> 
</package> 
+0

¡SÍ! esto tal vez lo que necesito. Lo intentaré ahora, pero de esta manera puedo tener una solución VS con 3 proyectos, cada uno de los cuales puede hacer referencia a los otros en la solución, pero cuando los empaquetó, cada paquete individual tiene dependencias en los otros paquetes. Ok voy a intentarlo.thx – Raif

Cuestiones relacionadas