web-dev-qa-db-fra.com

La restauration du paquet NuGet ne fonctionne pas

J'ai archivé un projet sur un ordinateur, vérifié sur un autre ordinateur et constaté que les fichiers binaires installés par NuGet étaient manquants. Je pourrais également les vérifier dans le contrôle de 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 dossier .nuget où il devrait en avoir un, 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 puis-je diagnostiquer ce problème?

145
Eric J.

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 de nuget

Package de mise à jour - Réinstallation

Force la réinstallation de tout dans la solution.


Package de mise à jour -Réinstallation -ProjectName myProj

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

Note : 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, ce qui pourrait entraîner des problèmes. Cela est moins susceptible de se produire au niveau du projet que du niveau de la solution.

Vous pouvez utiliser l'option de paramètre -safe en ligne de commande pour contraindre les mises à niveau vers des versions plus récentes avec les mêmes composants de version majeure et secondaire. Cette option a été ajoutée ultérieurement et résout certains des problèmes mentionnés dans les commentaires.

Package de mise à jour - Réinstallation - Sécurité

244
Chris Marisic

Pour ceux qui tombent sur ce post, lisez ceci.

NuGet 2.7+ nous a présenté restauration automatique du paquet. Ceci est considéré comme une approche bien meilleure pour la plupart des applications car elle ne modifie pas le processus MSBuild. Moins de maux de tête.

Quelques liens pour vous aider à démarrer:

23
davenewza

Avez-vous activé le mode de restauration de package dans le projet contenant les packages/fichiers 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 original est mort; cela pourrait être un remplacement: https://github.com/NuGet/Home/issues/1968

20
Alexandre Dion

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

Réinstallation d'un paquet par son nom dans tous les projets de la solution:

Update-Package –reinstall <packageName>

Réinstaller un paquet par son nom et en ignorant ses dépendances dans tous les projets de la solution:

Update-Package –reinstall <packageName> -ignoreDependencies

Réinstallation d'un paquet par son nom dans un projet:

Update-Package –reinstall <packageName> <projectName>

Réinstallation de tous les packages dans un projet spécifique:

Update-Package -reinstall -ProjectName <projectName>

Réinstallation de tous les packages dans une solution:

Update-Package -reinstall 
18
Mohammad Dayyan

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

Tout d'abord, lorsque je tente de générer ma solution à partir de la ligne de commande, à l'aide de msbuild.exe. Deuxièmement, lorsque je tente de construire le sln et les projets qui le contiennent sur mon serveur de build à l’aide de TFS et de CI. 

J'ai des erreurs qui prétendent qu'il manque des références. Lors de l'inspection 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 de 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é Restore Packages via VS2010 et j'ai vu que les versions ne fonctionnaient que dans VS2010. Là encore, l'utilisation de msbuild a échoué. Ma solution de contournement est probablement totalement invalide, mais pour mon environnement, tout fonctionnait à partir d'une génération en ligne de commande localement, ainsi que d'une génération de 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>

to: (avis, 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’espace dans mes répertoires. Cette solution de contournement a donc permis à mes versions de se terminer correctement ... pour le moment.

Je dirai que l'activation de la consignation de niveau de diagnostic dans votre construction aidera à indiquer les commandes exécutées par msbuild. C'est ce qui m'a amené à pirater temporairement le fichier de cibles.

12
PerryM

VS 2017

Outils> Gestionnaire de paquets NuGet> Paramètres du gestionnaire de paquets> Général Cliquez sur "Effacer tous les caches NuGet".

11
Niaz Morshed

Si quelque chose d'autre n'a pas fonctionné, essayez:

  1. Fermer le projet.
  2. Supprimer le dossier des packages dans votre dossier de solution.
  3. Ouvrez à nouveau le projet et restaurez les packages de nuggets.

Travaillé pour moi et c'est facile d'essayer.

4
Loaderon

Pour les autres personnes susceptibles de rencontrer ce problème, j'ai pu résoudre le problème en fermant Visual Studio et en rouvrant le projet. Une fois le projet chargé, les packages ont été restaurés au cours de la phase d’initialisation.

3
Mike Perrenoud

Si aucune des autres réponses ne vous convient, essayez ce qui suit: c’est la seule chose qui a fonctionné pour moi:

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

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

Réinstallez tous les packages dans la solution:

Update-Package -reinstall

Après cela, vos paquets de nugets 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 autre emplacement.

3
Jako Basson

Pour moi j'avais un tag vide NuGetPackageImportStamp dans .csproj 

<NuGetPackageImportStamp>
    </NuGetPackageImportStamp>

Il devrait idéalement contenir un GUID valide.

Supprimer cette étiquette ci-dessus, puis "Restaurer les pépites" a fonctionné pour moi.

2
anu

La meilleure solution de contournement que j’ai trouvée lors de la création d’un nouveau projet à partir de zéro, Puis importez tous les fichiers source avec le code . Mon projet n’était pas si compliqué et n’avait donc aucun problème.

1
Martin Deivid

Des paquets NuGet se sont cassés après une restauration du système sur mon système et ont été sauvegardés pendant environ deux jours. (Les packages NuGet avaient été installés entre-temps.) Pour y remédier, je devais accéder au dossier .nuget\packages de mon profil utilisateur, rechercher les packages et les supprimer. Ce n’est qu’alors que Visual Studio extrairait les packages et les ajouterait correctement comme références.

1
Aaron

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 s’ouvre dans Visual Studio à partir de Outils -> Gestionnaire de paquets NuGet -> Console du gestionnaire de paquets . Les commandes dans la console sont simples. Et pour obtenir de l’aide contextuelle lorsque vous tapez une commande, appuyez simplement sur le bouton et toutes les options qui commencent par les lettres que vous tapez sont affichées. Donc, si aucun paquet n'est installé, par exemple log4net, tapez la commande suivante:

Paquet d'installation log4net

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

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

1
Jeremy Ray Brown

La restauration automatique du paquet é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 du paquet dans les paramètres Outils >> Options >> Gestionnaire de paquets 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 supprimé de votre gestionnaire de tâches avant de redémarrer).

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

1
Daffy Punk

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

Les dépendances AspNetCore ont été installées/désinstallées et sont en cours de mise en cache. 'AspNetCore.All' refuserait de mettre à jour/réinstaller/supprimer correctement. Et indépendamment de ce que je faisais, il utiliserait les dépendances en cache (avec lesquelles il n'était pas compatible), car elles étaient une version supérieure.

  1. Tout sauvegarder. Notez la liste des dépendances que vous devez réinstaller, Quittez VisualStudio 
  2. Ouvrez tous les fichiers .proj dans un éditeur de texte et supprimez tous les PackageReference 
  3. Dans chaque projet, supprimez les dossiers bin, obj
  4. Supprimez tous les dossiers de "packages" trouvés dans la solution. 
  5. Solution ouverte, allez dans Tools > Nuget Package Manager > Package Manager Settings et Clear all Nuget caches. Vérifiez la console car elle peut échouer pour supprimer certains éléments - copiez le chemin du dossier et quittez visualstudio. 
  6. Supprimer tout élément de ce dossier Rouvrez la solution et démarrez En réinstallant à nouveau les paquets de nuget.

Si cela ne fonctionne toujours pas, répétez nuget et cherchez également votre lecteur dans Windows Explorer.

0
jv_

vs2015 pas d’activation du problème de restauration du nuget ..__ Ma solution:

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

  2. chaque fichier de projet ajoute: 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>
0
方权军

Dans mon cas, une tentative de restauration Nuget avortée avait corrompu l'un des fichiers packages.config 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.

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 sortie de la console de Nice de ce qui a été fait ...

0
James Joyce

Il existe un raccourci pour que la restauration Nuget fonctionne, 1. Assurez-vous que la connexion Internet ou les URL de Nuget sont correctes dans le menu des options de VS Tools 2. Examinez le dossier .nuget ou nuget dans la solution. Sinon, copiez-le pour obtenir nuget.exe. 

  1. SUPPRIMER les dossiers de paquets, s'ils existent 

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

    • coller le chemin complet du fichier nuget.exe RESTORE du fichier .sln! 
  3. utilisez la commande Install-pacakge, si la construction n’a pas abouti pour toutes les références manquantes. Espérons que cela aide (HIH) 
0
HydTechie

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

J'ai vu qu'il y avait 2 sources de paquets NUGET à partir desquelles les paquets pouvaient être téléchargés (dans Outils-> Gestionnaire de paquets Nuget-> Paramètres du gestionnaire de module de packaging). L'une des sources du paquet ne fonctionnait pas et Nuget essayait de télécharger à partir de cette source uniquement.

Les choses sont tombées en place une fois que j'ai modifié la source du paquet pour qu'il soit téléchargé à partir de: https://www.nuget.org/api/v2/ EXPLICTIMENT dans les paramètres

0
vamsee