La restauration du package NuGet ne fonctionne pas

165

J'ai archivé un projet sur un ordinateur, vérifié sur un autre et constaté que les binaires installés par NuGet sont manquants. Je pourrais également les enregistrer dans le contrôle de code source, mais il semble qu'il existe une meilleure solution:

http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

J'ai suivi ces instructions, j'ai maintenant un .nugetdossier où il devrait être, j'ai les entrées suivantes dans mon fichier .csproj:

<RestorePackages>true</RestorePackages>
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />

et pourtant lorsque je reconstruis ma solution, les packages manquants ne sont pas restaurés.

Qu'est-ce que je rate? Comment diagnostiquer ce problème?

Eric J.
la source
Voyez-vous nuget.exe déclenché dans le journal de sortie?
Pranav
Et surtout: voyez-vous des erreurs dans le journal de sortie?
maartenba

Réponses:

272

Notez que vous pouvez forcer l'exécution de la restauration de package en exécutant les commandes suivantes dans la console du gestionnaire de packages nuget

Update-Package -Réinstaller

Force la réinstallation de tout dans la solution.


Update-Package -Reinstall -ProjectName myProj

Force la réinstallation de tout dans le projet myProj.

Remarque : c'est l'option nucléaire. Lorsque vous utilisez cette commande, vous risquez de ne pas obtenir les mêmes versions des packages que vous avez installés et cela pourrait entraîner des problèmes. Cela est moins susceptible de se produire au niveau du projet par opposition au niveau de la solution.

Vous pouvez utiliser l' -safeoption de paramètre de ligne de commande pour contraindre les mises à niveau vers des versions plus récentes avec le même composant de version majeure et mineure. Cette option a été ajoutée plus tard et résout certains des problèmes mentionnés dans les commentaires.

Mettre à jour le package -Réinstaller -Safe

Chris Marisic
la source
7
@ NightOwl888 cela ressemble à quelque chose qui doit être signalé à nuget car il ne devrait y avoir aucun moyen de le faire, à moins peut-être que vous ayez toujours eu des problèmes de liaison DLL enfer et par chance cela fonctionnait, mais le réinstaller a mis fin à votre chance de fonctionner.
Chris Marisic
4
@nightowl si vous utilisez le contrôle de code source, il ne devrait pas être si difficile d'annuler les modifications.
ErikE
4
Le principal inconvénient ici est que les versions de package ne sont pas maintenues, donc la dernière version de package sera installée. Cela peut poser un problème si votre projet n'est pas compatible avec une nouvelle version.
JDandChips
4
Ouais, le Update-Package -Reinstall a fonctionné pour moi. Je ne sais pas pourquoi l'IDE ne le fait tout simplement pas. Tout est réglé correctement. Ugghh, je le jure, NuGet est à la fois bon et ennuyeux.
Jeremy Ray Brown
2
gentil à vous d'ajouter le "important! cela pourrait détruire votre projet" en BAS de votre réponse!
devman
25

Pour les autres qui tombent sur ce post, lisez ceci.

NuGet 2.7+ nous a présenté la restauration automatique des packages . Ceci est considéré comme une bien meilleure approche pour la plupart des applications car elle n'altère pas le processus MSBuild. Moins de maux de tête.

Quelques liens pour vous aider à démarrer:

Dave Nouveau
la source
2
Merci pour une réponse appropriée à la version actuelle de NuGet.
Eric J.
20

Vous devez choisir l'une des méthodes suivantes:

Réinstaller un package par son nom dans tous les projets de la solution:

Update-Package –reinstall <packageName>

Réinstaller un package par son nom et ignorer ses dépendances dans tous les projets de la solution:

Update-Package –reinstall <packageName> -ignoreDependencies

Réinstaller un package par son nom dans un projet:

Update-Package –reinstall <packageName> <projectName>

Réinstaller tous les packages dans un projet spécifique:

Update-Package -reinstall -ProjectName <projectName>

Réinstaller tous les packages dans une solution:

Update-Package -reinstall 
Mohammad Dayyan
la source
J'ai résolu mon problème de style rapide et sale.
blackorchid
20

Avez-vous activé le mode de restauration de package dans le projet contenant les packages / binaires manquants? Il existe un problème connu qui nécessite que les packages soient correctement installés lors de l'activation du mode de restauration:

http://nuget.codeplex.com/workitem/1879


Le lien d'origine est mort; cela pourrait être un remplacement: https://github.com/NuGet/Home/issues/1968

Alexandre Dion
la source
3
Merci pour le lien. Activer le mode de restauration de package dans un projet qui a les packages / binaires manquants sera un cas courant. Si vous n'avez pas les paquets, c'est à ce moment-là que vous voulez les obtenir. Échec du cas d'utilisation.
Anthony
2
Lorsque vous dites "activer le mode de restauration de package dans le projet qui contient les packages manquants", que voulez-vous dire? Dois-je exécuter une commande de console pour ce faire?
CodeWarrior
90
NuGet me fait défaut quotidiennement, je le méprise totalement.
Jammer
14

VS 2017

Outils> Gestionnaire de packages NuGet> Paramètres du gestionnaire de packages> Général Cliquez sur "Effacer tous les cache (s) NuGet"

Niaz Morshed
la source
Lors de la vérification d'une solution hors du contrôle de code source (gérée à l'aide de Visual Studio Team Explorer avec DevOps / Git), les versions n'étaient pas possibles en raison de références manquantes et les packages de restauration ne faisaient rien. Cette solution était la bonne pour cette circonstance.
PJRobot le
12

J'ai rencontré ce problème dans deux scénarios.

Tout d'abord, lorsque j'essaie de créer ma solution à partir de la ligne de commande à l'aide de msbuild.exe. Deuxièmement, lorsque j'essaye de construire le sln et les projets contenant sur mon serveur de build en utilisant TFS et CI.

J'obtiens des erreurs affirmant que les références sont manquantes. Lors de l'inspection à la fois de mon répertoire de construction local et du serveur TFS, je constate que le dossier / packages n'est pas créé et que les packages nuget ne sont pas copiés. Suivre les instructions listées dans la réponse d'Alexandre http://nuget.codeplex.com/workitem/1879 n'a pas non plus fonctionné pour moi.

J'ai activé les packages de restauration via VS2010 et j'ai vu que les versions ne fonctionnent qu'à partir de VS2010. Encore une fois, l'utilisation de msbuild échoue. Ma solution de contournement est probablement totalement invalide, mais pour mon environnement, tout fonctionnait à partir d'une ligne de commande construite localement, ainsi que d'une construction CI dans TFS.

Je suis entré dans. \ Nuget et j'ai changé cette ligne dans le fichier .nuget \ NuGet.targets:

de:

<RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" -o "$(PackagesDir)"</RestoreCommand>

à: (remarquez, sans les guillemets autour des variables)

<RestoreCommand>$(NuGetCommand) install $(PackagesConfig) -source $(PackageSources) -o $(PackagesDir)</RestoreCommand>

Je comprends que si mes répertoires contiennent des espaces, cela échouera, mais je n'ai pas d'espaces dans mes répertoires et donc cette solution de contournement a permis à mes builds de se terminer avec succès ... pour le moment.

Je dirai que l'activation de la journalisation du niveau de diagnostic dans votre build aidera à montrer quelles commandes sont exécutées par msbuild. C'est ce qui m'a conduit à pirater temporairement le fichier des cibles.

PerryM
la source
J'ai eu un problème avec les guillemets doubles et j'ai dû faire la même modification que vous. Très frustrant!
Greg
5

Si quelque chose ne fonctionne pas, essayez:

  1. Fermer le projet.
  2. Supprimez le dossier packages dans votre dossier solution.
  3. Ouvrez à nouveau Project et restaurez à nouveau les packages Nugget.

A travaillé pour moi et c'est facile à essayer.

Loaderon
la source
2
Cela a fonctionné pour moi. À l'étape 3, je n'ai pas eu à restaurer manuellement les packages - ils ont été restaurés automatiquement lorsque j'ai ouvert le projet.
Tawab Wakil
5

Si aucune des autres réponses ne fonctionne pour vous, essayez ce qui suit, qui était la seule chose qui a fonctionné pour moi:

Trouver votre .csproj fichier et modifiez-le dans un éditeur de texte.

Trouvez la <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">balise dans votre.csproj fichier et supprimez tout le bloc.

Réinstallez tous les packages de la solution:

Update-Package -reinstall

Après cela, vos packages nuget doivent être restaurés, je pense que cela pourrait être un cas marginal qui ne se produit que lorsque vous déplacez votre projet vers un emplacement différent.

Jako Basson
la source
Cela m'a évité de devenir complètement fou. Merci!
Jeff Hay le
4

Juste pour les autres qui pourraient rencontrer ce problème, j'ai pu résoudre le problème en fermant Visual Studio et en rouvrant le projet. Lorsque le projet a été chargé, les packages ont été restaurés lors de la phase d'initialisation.

Mike Perrenoud
la source
4

Pour moi, j'avais une balise vide NuGetPackageImportStamp dans .csproj

<NuGetPackageImportStamp>
    </NuGetPackageImportStamp>

Il doit idéalement contenir un GUID valide.

La suppression de la balise ci-dessus, puis "Restore Nugets" a fonctionné pour moi.

anu
la source
1

Parfois, quelque chose d'étrange se produit et l'utilisation de Visual Studio pour restaurer automatiquement ne fonctionne pas. Dans ce cas, vous pouvez utiliser la console NuGet Package Manager. Cela est ouvert dans Visual Studio à partir des outils -> NuGet Package Manager -> Package Manager Console . Les commandes de la console sont simples. Et pour obtenir une aide contextuelle lors de la saisie d'une commande, appuyez simplement sur le bouton et cela vous donnera toutes les options commençant par les lettres que vous tapez. Donc, si un package n'est pas installé, par exemple log4net, tapez la commande suivante:

Package d'installation log4net

Vous pouvez faire beaucoup plus, comme spécifier la version à installer, mettre à jour un package, désinstaller un package, etc.

J'ai dû utiliser la console pour m'aider lorsque Visual Studio agissait comme un cinglé.

Jeremy Ray Brown
la source
1

La restauration automatique des packages échouera pour l'une des raisons suivantes:

  1. Vous n'avez pas supprimé les fichiers NuGet.exe et NuGet.targets du dossier .nuget de la solution (qui se trouve dans le dossier racine de votre solution)
  2. Vous n'avez pas activé la restauration automatique des packages à partir des Outils >> Options >> Gestionnaire de packages Nuget >> Paramètres généraux.
  3. Vous avez oublié de supprimer manuellement les références de tous vos projets au fichier Nuget.targets
  4. Vous devez redémarrer Visual Studio (assurez-vous que le processus est tué à partir de votre gestionnaire de tâches avant de redémarrer).

L'article suivant décrit plus en détail comment traiter les points 1 à 3: https://docs.nuget.org/consume/package-restore/migrating-to-automatic-package-restore

CShark
la source
1
En ce qui concerne votre point n ° 1, le lien que vous fournissez contredit votre conseil: «Si vous utilisez TFS 1. Supprimez les fichiers NuGet.exe et NuGet.targets du dossier .nuget de la solution 2. Conservez le fichier NuGet.Config pour continuer à contourner ajout de packages au contrôle de code source. "
Andrew Dennison
1

Des packages NuGet ont été interrompus après avoir effectué une restauration du système sur mon système, en le sauvegardant environ deux jours. (Les packages NuGet avaient été installés entre-temps.) Pour résoudre ce problème, je devais aller dans le dossier .nuget \ packages de mon profil utilisateur, trouver les packages et les supprimer. Ce n'est qu'alors que Visual Studio récupère les packages et les ajoute correctement en tant que références.

Aaron
la source
1

La meilleure solution de contournement que j'ai trouvée en créant un nouveau projet à partir de zéro, puis importez tous les fichiers source avec le code. Mon projet n'était pas si compliqué donc je n'ai eu aucun problème à partir de là.

Martin Deivid
la source
1

Aucune des autres solutions n'a fonctionné dans ma situation:

Les dépendances AspNetCore avaient été installées / désinstallées et étaient en cours de mise en cache. 'AspNetCore.All' refuserait de mettre à jour / réinstaller / supprimer correctement. Et peu importe ce que j'ai fait, il utiliserait les dépendances mises en cache (avec lesquelles il n'était pas compatible), car il s'agissait d'une version supérieure.

  1. Sauvegardez tout. Notez la liste des dépendances dont vous aurez besoin pour réinstaller, quitter VisualStudio
  2. Ouvrez tous les fichiers .proj dans un éditeur de texte et supprimez tout PackageReference
  3. Dans chaque projet, supprimez le bin,obj dossiers
  4. Supprimez tous les dossiers «packages» que vous trouverez dans la solution.
  5. Solution ouverte, entrez Tools > Nuget Package Manager > Package Manager SettingsetClear all Nuget caches . Vérifiez la console car elle peut ne pas supprimer certains éléments - copiez le chemin du dossier et quittez Visual Studio.
  6. Supprimez tout ce qui se trouve dans ce dossier. Rouvrez la solution et recommencez à installer les packages nuget à partir de zéro.

Si cela ne fonctionne toujours pas, répétez mais recherchez également votre lecteur dans l'explorateur Windows nugetet supprimez tout ce qui cherche à cacher.

jv_
la source
0

vs2015 aucun problème de restauration de nuget d'activation. Ma solution:

  1. ajouter le dossier .nuget, ajouter le fichier NuGet.Config et NuGet.targets dans le répertoire .nuget

  2. chaque fichier de projet ajouter: build

  <RestorePackages>true</RestorePackages>

  <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
  </Target>
方 权 军
la source
C'est la vieille façon de faire. Voir la réponse @davenewza et son lien vers blog.davidebbo.com/2014/01/…
timB33
0

Si l'erreur à laquelle vous faites face est "impossible de se connecter au serveur distant" comme c'était le cas pour la mienne, alors il serait avantageux que vous ayez cette vérification en plus des vérifications fournies dans les commentaires ci-dessus.

J'ai vu qu'il y avait 2 sources de packages NUGET à partir desquelles les packages pouvaient être téléchargés (dans Tools-> Nuget Package Manager-> Packager Manager Settings). L'une des sources du package ne fonctionnait pas et Nuget essayait de télécharger uniquement à partir de cette source.

Les choses se sont mises en place une fois que j'ai changé la source du paquet à télécharger à partir de: https://www.nuget.org/api/v2/ EXPLICITEMENT dans les paramètres

Vamsee
la source
0

Dans mon cas, une tentative de restauration Nuget avortée avait corrompu l'un des packages.configfichiers de la solution. Je n'ai pas découvert cela avant de vérifier mon arbre de travail git. Après avoir annulé les modifications dans le fichier, la restauration Nuget fonctionnait à nouveau.

Frederik Struck-Schøning
la source
0

Il existe un raccourci pour faire fonctionner la restauration de Nuget, 1. Assurez-vous que la connexion Internet ou les URL Nuget sont correctes dans le menu d'options de VS Tools 2. Regardez le dossier .nuget ou nuget dans la solution, sinon - copiez à partir de n'importe quel pour obtenir nuget.exe

  1. SUPPRIMER les dossiers de packages, s'il existe

  2. Ouvrez la console du gestionnaire de packages, exécutez cette commande

    • coller le chemin complet du nuget.exe RESTORE le chemin complet du fichier .sln!
  3. utilisez la commande Install-pacakge, si la compilation n'a pas abouti pour les références manquantes. J'espère que ça aide (HIH)
HydTechie
la source
0

Dans VS2017, cliquez avec le bouton droit sur la solution => Ouvrir la ligne de commande => Ligne de commande du développeur.

Une fois ouvert, tapez (et appuyez sur Entrée après)

dotnet restore

Cela restaurera tous les paquets et vous obtiendrez une belle sortie de console de ce qui a été fait ...

James Joyce
la source