2011-03-24 36 views
134

Supongamos que tengo una solución con 3 proyectos:NuGet para soluciones con múltiples proyectos

  • Core
  • IU
  • pruebas

Algunos de los paquetes NuGet que uso se aplicarán a todos 3 proyectos. Algunos simplemente se aplicarán a la interfaz de usuario y las pruebas, y algunos solo se aplicarán a las pruebas (como NUnit).

¿Cuál es la forma correcta para configurar esto usando NuGet?

  1. ¿Debo usar "Agregar referencia de paquete de biblioteca" en los tres proyectos cada vez que necesito una referencia?
  2. ¿Debo usar "Agregar referencia de paquete de biblioteca" la primera vez que necesito un paquete, y luego uso Agregar referencia-> Buscar usos posteriores?

En cualquier caso, el número de archivospackages.config debería tener?

Respuesta

213

Para cualquiera tropezarse con esto, ahora existe la opción siguiente:

Haga clic derecho en su solución> Administrar paquetes NuGet de Solución ...

... O:

Herramientas> Administrador de paquetes de biblioteca> Administrar paquetes NuGet para solución ...

Y si va al área de paquetes instalados puede 'Administrar' un único paquete en cada proyecto de la solución.

+5

Actualizado para marcar esto en la respuesta porque ahora es la solución correcta. –

+2

@EricJ. no hay problema, lástima que StackOverflow no permita que otras personas cambien la respuesta aceptada de una pregunta anterior. –

+5

¿Qué sucede si deseo instalar el paquete para la Solución con una versión específica? El mago no me da esa opción. En la consola puedo ejecutarlo así 'Install-Package RazorEngine -Version 3.3.0' pero se aplicará solo para el proyecto que se seleccione en el menú desplegable de la consola. – MaciejLisCK

8

Debe usar la "Agregar referencia de paquete de biblioteca" para toda su biblioteca externa en cada proyecto de su solución. Terminará con un packages.config por proyecto.

Sin embargo, descargará el paquete solo una vez y lo reutilizará localmente para todos sus otros proyectos.

+4

Nota: Si Don Actualice todos los paquetes de la biblioteca, terminará con 3 versiones diferentes del mismo conjunto. .NET puede funcionar con 3 versiones diferentes si están en el GAC o con diferentes nombres. Pero porque tendrán el mismo nombre. Terminará con compilaciones no operativas porque la versión anterior se copió en la versión más reciente. – graffic

12

Si desea instalar un paquete en múltiples soluciones, escribí una práctica secuencia de comandos de Powershell para hacerlo, consulte here.

Incluso puede filtrar el comando Get-Project -All y seleccionar un subconjunto de la lista de proyectos.

70

Puede utilizar la consola para apuntar a múltiples proyectos

Tools > Library Package Manager > Package Manager Console 

a continuación, utilizar este comando

Get-Project PROJECT-NAMES-WITH-COMMAS | Install-Package PACKAGENAME 

por ejemplo

Get-Project Core,UI | Install-Package FluentDateTime 
+3

+1: Al menos con la versión actual de NuGet, prefiero este método en el cuadro de diálogo "Gestionar paquetes de NuGet para la solución", porque nuestra solución es muy grande y no puedo pegar una lista de nombres de proyectos en ese diálogo. –

17

Este dulce trato funciona para mí:

PM> Get-Project -all | where {$_.Name -match "Songhay.Silverlight" -and 
    $_.Name -notmatch "ApplicationLoader" -and $_.Name -notmatch ".Xml"} 
    | ForEach-Object {Install-Package MvvmLight -project $_.Name} 
+2

¡Así es como se hace! Por ejemplo, si quiere listar todas las versiones de json.net para todos sus proyectos en una solución, intente esto: 'Get-Project -all | ForEach-Object {Get-Package -ProjectName $ _. Name -Filter Newtonsoft.Json} ' –

+1

@EdwardMMeshuris muy buen comando, pero no obtendrá la coincidencia exacta para el nombre del paquete. Aquí hay una actualización leve para la coincidencia exacta 'Get-Project -all | ForEach-Object {Get-Package-NombreProyecto $ _. Nombre -filter PACKAGE_NAME} | where-object {$ _. id -eq 'PACKAGE_NAME'} ' –

0

En consola Administrador de paquetes puede escribir la siguiente comando:

Get-Project -all | ForEach-Object {Get-Package -ProjectName $_.Name -filter 
PACKAGE_NAME} | where-object { $_.id -eq 'PACKAGE_NAME' } | Install-Package 
PACKAGE_NAME -Version VERSION 

Puede utilizar este comando para instalar o actualizar también (Actualización-Package)

Cuestiones relacionadas