c# visual-studio-2010 teamcity nuget

c# - Creando un paquete NuGet de múltiples proyectos en una solución



visual-studio-2010 teamcity (3)

Si ha descargado NuGet.exe , puede ejecutar: nuget pack Myproject.csproj -IncludeReferencedProjects y esto debe incluir todos sus proyectos. Aquí hay una nota de los docs NuGet:

Si el proyecto hace referencia a otros proyectos, puede agregar los proyectos a los que se hace referencia como parte del paquete, o como dependencias con la opción -IncludeReferencedProjects. Esto se hace recursivamente. Por ejemplo, supongamos que tiene el proyecto A.csproj, que hace referencia a B.csproj y C.csproj, mientras que B.csproj hace referencia a D.csproj & E.csproj, C.csproj referencias a F.csproj & G.csproj. Entonces, cuando corres:

nuget pack A.csproj -IncludeReferencedProjects

el paquete generado contendrá archivos de los proyectos B, C, D, E, F y G, además de los archivos del proyecto A.

Si un proyecto al que se hace referencia tiene un archivo nuspec correspondiente con el mismo nombre, entonces el proyecto al que se hace referencia se agrega como una dependencia. Utilizando el mismo ejemplo, supongamos que ahora hay un archivo C.nuspec en el mismo directorio que el archivo de proyecto C.csproj. Cuando corres

nuget pack A.csproj -IncludeReferencedProjects

el paquete generado contendrá los archivos de los proyectos B, D, E, además de los archivos del proyecto A, y el paquete depende de C.

Por favor, vea también la referencia de la línea de comandos .

Tengo una solución en la que estoy trabajando que contiene 4 proyectos de biblioteca de clases ( A , B , C , D ). A y B podrían considerarse los proyectos de nivel superior en la solución. Tanto A como B referencia a C , y D está solo.

Estos cuatro proyectos representan un grupo de servicios que he realizado que manejan un flujo de trabajo automatizado. Todos están estrechamente relacionados y solo se utilizarán en una ubicación (el administrador del servicio), por lo que no quiero dividirlos en diferentes soluciones.

Mi problema es que quiero crear un solo paquete de NuGet que contendrá las 4 bibliotecas, sin tener que compilarlas todas y recopilar sus DLL manualmente. Sé que técnicamente podría lograr esto haciendo que A o B hagan referencia a los proyectos restantes, pero esa no es una relación verdadera y creo que debería evitarse.

He buscado mucho sobre este problema y no puedo encontrar otra solución que no sea recolectar manualmente los DLL y compilar el paquete yo mismo. ¿Hay alguna forma de lograr el resultado que deseo con las funciones / habilidades de NuGet?

NOTA : En caso de que las etiquetas no lo aclaren, actualmente estoy usando VS2010 con un servidor de compilación TeamCity. En caso de que sea relevante, también estoy usando Git a través de un servidor Stash.

EDIT : Me acabo de dar cuenta de que esto podría ser lo suficientemente importante como para mencionarlo. Estos proyectos hacen referencia a otros paquetes de NuGet que tendré que marcar como dependencias.


Tienes que definir tu propio manifiesto nuspec. Puede listar los conjuntos que contienen en la sección de files :

<file src="A/bin/Release/A.dll" target="lib/net40" /> <file src="B/bin/Release/B.dll" target="lib/net40" /> ...

Para más detalles lea la referencia NuSpec .

Luego haga referencia a ese archivo nuspec en el paso de compilación de NuPack en lugar del proyecto.