how - Comment puis-je obtenir NuGet pour installer/mettre à jour tous les paquets dans le paquetage.config?




nuget version (10)

J'ai une solution avec plusieurs projets dedans. La plupart des références tierces sont manquantes, mais il existe un fichier packages.config pour chaque projet. Comment puis-je obtenir NuGet pour installer / mettre à jour tous les paquets nécessaires? Est-ce que cela doit être fait en ligne de commande pour chaque projet?


Après 3 heures de recherche et d'investigation.

J'ai eu des problèmes parce que nous avons deux membres en équipe (en utilisant le contrôle source de GitHub), parce que nous n'avons pas limité les fichiers pour les paquets à envoyer au référentiel distant, un des membres de l'équipe envoyait des paquets au serveur mon local.

Après cela, j'ai eu le même problème que PO, aussi je ne pouvais pas publier mon projet API sur le serveur.

Au et je viens d'utiliser

Update-Package -Reinstall - exécute cette commande sur la console du gestionnaire de packages

Cette commande va réinstaller tous les paquets que vous avez utilisés dans votre solution. (Pour chaque projet)

Réinstallez tous les packages dans TOUS LES PROJETS de la solution actuelle:

Update-Package -ProjectName 'NameOfProject' -Reinstall - exécute cette commande sur la console du gestionnaire de packages

Cette commande va réinstaller tous vos paquets qui sont en relation avec le projet que vous avez spécifié après "-ProjectName". Et je pense que c'est mieux parce que j'ai attendu une demi-heure pour réinstaller tous les paquets en solution.

Pour cela, merci à .

En outre, je vous recommande que lorsque vous tirez des modifications à partir du serveur distant, appuyez sur le bouton "Restaurer les paquets" qui sera affiché par Visual Studio.


Au VS2012 V11, si j'utilise "-Reinstall" à la fin de la ligne, cela ne fonctionne pas.

Donc j'ai simplement utilisé:

Update-Package -ProjectName 'NAME_OF_THE_PROJECT'

Dans Visual Studio 2017 - Lorsque vous compilez en utilisant IDE - Il va télécharger tous les paquets de nuget manquants et enregistrer dans le dossier "packages".

Mais sur la machine de compilation la compilation a été faite en utilisant msbuild.exe. Dans ce cas, j'ai téléchargé nuget.exe.

Au cours de chaque processus de construction avant d'exécuter msbuild.exe. Il va exécuter -> nuget.exe restore NAME_OF_SLN_File (s'il n'y a qu'un seul fichier .SLN, vous pouvez ignorer ce paramètre).


Il existe une autre manière, plus récente et plus rapide, de le faire depuis Visual Studio. Consultez ce post par David Ebbo, et référencez la section des commentaires si vous avez des problèmes. Fondamentalement, vous procédez comme suit dans l'invite du Gestionnaire de package:

PM> Install-Package NuGetPowerTools
PM> Enable-PackageRestore

Ensuite, lorsque vous construisez votre solution, les paquets seront automatiquement installés s'ils sont manquants.

Mettre à jour:

Cette fonctionnalité est intégrée dans Nuget 1.6 avec l'intégration de Visual Studio, donc vous n'avez même pas besoin d'installer NuGetPowerTools ou de taper des commandes. Tout ce que tu dois faire est

Cliquez avec le bouton droit sur le nœud Solution dans l'Explorateur de solutions et sélectionnez Activer la restauration de package NuGet.

Lisez cet article pour plus de détails.


Je crois que la première chose que vous devez faire est d' activer la fonctionnalité de restauration de paquet . Voir aussi here . Ceci est fait au niveau de la solution (pas du projet).

Mais cela ne vous aidera pas jusqu'au bout - j'ai rencontré un problème similaire après avoir activé la fonction de restauration. (VS2013, NuGet 2.8.)

Il s'est avéré que j'avais (involontairement) commis les paquets au contrôle de la source lorsque j'ai engagé le projet - mais Visual Studio (et le plugin de contrôle de la source) avait utilement ignoré les binaires lors de l'enregistrement.

Le problème est survenu lorsque j'ai créé une branche de publication. Ma copie locale de la branche dev / main / trunk avait les binaires, parce que c'est là que j'avais initialement installé / téléchargé les paquets.
Cependant, dans la nouvelle branche de publication,

  • les dossiers de paquets et les fichiers .nupkg étaient tous là - donc NuGet ne pensait pas qu'il y avait quelque chose à restaurer;
  • mais en même temps, aucune DLL n'était présente - c.-à-d. les références tierces étaient manquantes - donc je ne pouvais pas construire.

J'ai supprimé tous les dossiers de paquets dans $(SolutionDir)/packages (sous la branche de publication), puis j'ai exécuté une reconstruction complète, et cette fois la génération a réussi.
... et bien sûr je suis retourné et ai enlevé les dossiers de paquetage du contrôle de source (dans la branche de tronc et de dégagement). Je ne sais pas (encore) si le fichier repositories.config doit également être supprimé.

La plupart des composants installés pour vous par les modèles de projet, du moins pour les projets Web, sont des packages NuGet. Autrement dit, ce problème n'est pas limité aux packages que vous avez ajoutés.
Donc, activez la restauration du paquet immédiatement après avoir créé le projet / la solution, et avant d'effectuer une vérification initiale, effacez le dossier des packages (et assurez-vous de valider le dossier .nuget au contrôle de la source).

Disclaimer: J'ai vu une autre réponse ici sur SO qui indiquait que la suppression du dossier des packages faisait partie de la résolution. Cela m'a mis sur la bonne voie, alors je voudrais donner le crédit à l'auteur, mais je ne peux plus localiser cette question / réponse. Je posterai un edit si je tombe dessus.

Je note également que Update-Package -reinstall modifiera les .sln et .csproj / .vbproj . Au moins, c'est ce qu'il a fait dans mon cas. Ce qui à mon humble avis rend cette option beaucoup moins attrayante.


Je sais que c'est un vieux billet, mais j'ai pensé que cela pourrait être utile. Si vous avez besoin d'ignorer des packages spécifiques pendant le processus de mise à jour (comme les packages qui mettent à jour les références JavaScript), utilisez le script PowerShell suivant (assurez-vous que votre source de package est définie sur "Tous" dans la console Gestionnaire de package):

EDIT 2014-09-25 10:55 AM EST - Correction d'un bug dans le script

$packagePath = "packages.config"
$projectName = "MyProjectName"

$packagesToIgnore = @(
    "bootstrap",
    "jQuery",
    "jquery-globalize",
    "jquery.mobile",
    "jQuery.jqGrid",
    "jQuery.UI.Combined",
    "jQuery.Validation",
    "Microsoft.jQuery.Unobtrusive.Validation",
    "Modernizr",
    "Moment.js"
)

[xml]$packageFile = gc $packagePath
$packagesToProcess = $packageFile.packages.package | Where-Object {$packagesToIgnore -notcontains $_.id}

$packagesToProcess | % { Update-Package -reinstall -projectname $projectName -id $($_.id) }

Réinstallez tous les packages dans TOUS LES PROJETS de la solution actuelle:

Update-Package -Reinstall

Réinstallez tous les paquets dans SPECIFIC PROJECT de la solution actuelle ( Merci à unarity et ashes999 ):

Update-Package -ProjectName 'YourProjectNameGoesHere' -Reinstall

Si vous installez Nuget 2.8, cochez la case

Tools >> Nuget Manager >> Package Manager Settings >> Automatically check for missing packages during build

dans Visual Studio. Si elle est cochée, reconstruisez simplement le projet pour restaurer toutes vos bibliothèques de référence.


Vous pouvez utiliser nuget.exe pour restaurer vos paquets ou avec NuGet 2.7 ou supérieur, installé, vous pouvez simplement compiler votre solution dans Visual Studio, qui restaurera également les paquets manquants.

Pour NuGet.exe, vous pouvez exécuter la commande suivante pour chaque projet.

nuget install packages.config

Ou avec NuGet 2.7, vous pouvez restaurer tous les paquets de la solution en utilisant la ligne de commande.

nuget restore YourSolution.sln

Les deux vont abattre les paquets. Vos fichiers de projet ne seront cependant pas modifiés lors de l'exécution de cette commande, de sorte que le projet devrait déjà avoir une référence aux paquets NuGet. Si ce n'est pas le cas, vous pouvez utiliser Visual Studio pour installer les packages.

Avec NuGet 2.7 et plus, Visual Studio restaurera automatiquement les paquets NuGet manquants lors de la construction de votre solution, de sorte qu'il n'est pas nécessaire d'utiliser NuGet.exe.

Pour mettre à jour tous les packages de votre solution, commencez par les restaurer, puis vous pouvez utiliser NuGet.exe pour mettre à jour les packages ou, dans Visual Studio, mettre à jour les packages à partir de la fenêtre Console du gestionnaire de packages ou enfin Boîte de dialogue Packages

A partir de la ligne de commande, vous pouvez mettre à jour les paquets dans la solution à la dernière version disponible sur nuget.org.

nuget update YourSolution.sln

Notez que cela n'exécutera aucun script PowerShell dans les packages NuGet.

Dans Visual Studio, vous pouvez utiliser la console du gestionnaire de packages pour mettre également à jour les packages. Cela a l'avantage que tous les scripts PowerShell seront exécutés dans le cadre de la mise à jour où l'utilisation de NuGet.exe ne les exécutera pas. La commande suivante mettra à jour tous les paquets dans chaque projet à la dernière version disponible sur nuget.org.

Update-Package

Vous pouvez également limiter cela à un projet.

Update-Package -Project YourProjectName

Si vous souhaitez réinstaller les packages avec les mêmes versions que celles précédemment installées, vous pouvez utiliser l'argument -reinstall avec la commande Update-Package .

Update-Package -reinstall

Vous pouvez également limiter cela à un projet.

Update-Package -reinstall -Project YourProjectName

L'option -reinstall désinstalle d'abord, puis réinstalle le package dans un projet.

Vous pouvez également mettre à jour les packages à l'aide de la boîte de dialogue Manage Packages .

Mises à jour:

  • 2013/07/10 - Mise à jour avec des informations sur la restauration de nuget dans NuGet 2.7
  • 2014/07/06 - Mise à jour avec des informations sur la restauration automatique des paquets dans Visual Studio et mise à jour de la réponse avec d'autres modifications apportées à NuGet.
  • 2014/11/21 - Mise à jour avec des informations sur -reinstall

maintenant Nuget Package Manager Console dans Visual Studio 2012 vous donne automatiquement un bouton "Restaurer" dès qu'il trouve un paquet non installé mais dedans dans package.config. Caractéristique impressionnante!