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?
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é
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:
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
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
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.
VS 2017
Outils> Gestionnaire de paquets NuGet> Paramètres du gestionnaire de paquets> Général Cliquez sur "Effacer tous les caches NuGet".
Si quelque chose d'autre n'a pas fonctionné, essayez:
Travaillé pour moi et c'est facile d'essayer.
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.
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.
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.
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.
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.
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é.
La restauration automatique du paquet échouera pour l'une des raisons suivantes:
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
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.
PackageReference
bin
, obj
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. Si cela ne fonctionne toujours pas, répétez nuget
et cherchez également votre lecteur dans Windows Explorer.
vs2015 pas d’activation du problème de restauration du nuget ..__ Ma solution:
ajouter un dossier .nuget, ajouter le fichier NuGet.Config et NuGet.targets dans le répertoire .nuget
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>
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 ...
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.
SUPPRIMER les dossiers de paquets, s'ils existent
Ouvrez la console du gestionnaire de packages, exécutez cette commande
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