159 votes

NuGet pour les solutions comportant plusieurs projets

Supposons que j'ai une solution avec 3 projets :

  • Core
  • UI
  • Tests

Certains des paquets NuGet que j'utilise s'appliqueront aux 3 projets. Certains ne s'appliquent qu'à l'interface utilisateur et aux tests, et d'autres ne s'appliquent qu'aux tests (comme NUnit).

Quel est le droite comment le mettre en place en utilisant NuGet ?

  1. Dois-je utiliser "Add Library Package Reference" sur les trois projets chaque fois que j'ai besoin d'une référence ?
  2. Dois-je utiliser "Add Library Package Reference" la première fois que j'ai besoin d'un paquet, puis utiliser Add Reference->Browse pour les utilisations suivantes ?

Dans les deux cas, combien de paquets.config les fichiers que je devrais avoir ?

247voto

JasonC Points 1359

Pour tous ceux qui tombent sur ce problème, il existe maintenant l'option suivante :

Cliquez avec le bouton droit de la souris sur votre solution > Manage NuGet Packages for Solution...

... Ou :

Outils > Gestionnaire de paquets de bibliothèques > Gérer les paquets NuGet pour la solution...

Et si vous allez dans la zone des paquets installés, vous pouvez "gérer" un seul paquet pour tous les projets de la solution.

5 votes

Que faire si je veux installer un paquet pour une solution avec une version spécifique ? L'assistant ne me donne pas cette option. Dans la console, je peux l'exécuter comme suit Install-Package RazorEngine -Version 3.3.0 mais elle ne sera appliquée que pour le projet qui est sélectionné dans la liste déroulante de la console.

0 votes

Cette fonctionnalité est-elle prise en charge dans Visual Studio 2010 ? Je viens de poser une question ici - stackoverflow.com/questions/33163987/

0 votes

Si vous avez un projet de grande envergure, feriez-vous vraiment confiance à un gestionnaire de paquets pour mettre à jour les dépendances ?

80voto

Simon Points 11945

Utiliser la console pour cibler plusieurs projets

Tools > Library Package Manager > Package Manager Console

puis utilisez cette commande

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

par exemple

Get-Project Core,UI | Install-Package FluentDateTime

4 votes

+1 : Au moins avec la version actuelle de NuGet, je préfère encore cette méthode à la boîte de dialogue "Manage NuGet Packages for Solution", parce que notre solution est vraiment grande, et je ne peux pas coller une liste de noms de projets dans cette boîte de dialogue.

21voto

rasx Points 1858

Cette offre avantageuse fonctionne pour moi :

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 votes

C'est comme ça que ça se passe ! Par exemple, si vous voulez lister toutes les versions de json.net pour tous vos projets dans une solution, essayez ceci : Get-Project -all | ForEach-Object {Get-Package -ProjectName $_.Name -Filter Newtonsoft.Json}

1 votes

@EdwardMMeshuris très bonne commande mais elle n'obtiendra pas de correspondance exacte pour le nom du paquet. Voici une commande légèrement mise à jour pour une correspondance exacte Get-Project -all | ForEach-Object {Get-Package -ProjectName $_.Name -filter PACKAGE_NAME} | where-object { $_.id -eq 'PACKAGE_NAME' }

12voto

Aaron Powell Points 15598

Si vous voulez installer un paquet sur plusieurs solutions, j'ai écrit un script Powershell très pratique pour le faire, voir aquí .

Vous pouvez même filtrer les Get-Project -All et cibler un sous-ensemble de la liste de projets.

8voto

Nekresh Points 1900

Vous devez utiliser l'option "Add Library Package Reference" pour toutes vos bibliothèques externes sur chaque projet de votre solution. Vous vous retrouverez avec un packages.config par projet.

Cependant, vous ne téléchargerez le paquet qu'une seule fois et le réutiliserez localement pour tous vos autres projets.

4 votes

Remarque : Si vous ne mettez pas à jour tous les paquets de bibliothèques, vous vous retrouverez avec 3 versions différentes du même assemblage. .NET peut fonctionner avec 3 versions différentes si elles sont dans le GAC ou avec des noms différents. Mais parce qu'elles auront le même nom. Vous vous retrouverez avec des constructions non fonctionnelles parce que l'ancienne version a été copiée sur la nouvelle version.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X