179 votes

Restauration des références Nuget ?

J'ai une solution et un projet dans Visual Studio 2012.

Le projet a un fichier packages.config dans la Racine du projet.

Pour les besoins de cette question, supposons que j'ai accidentellement supprimé ces bibliothèques de l'arborescence de l'entreprise. References de mon projet.

Dans le gestionnaire de paquets NuGet, l'interface affiche toujours une coche à côté de ces paquets, indiquant qu'ils sont installés.

La seule façon que je vois de résoudre cette situation est de supprimer toutes les entrées de l'application packages.config ce qui corrigera le problème de l'interface NuGet qui les signale comme étant installés, et ajoutera à nouveau chacun d'entre eux.

Existe-t-il une méthode plus intelligente ? J'espérais que l'activation de l'option " enable nuget to restore missing packages " (activer nuget pour restaurer les paquets manquants) résoudrait le problème, mais cela ne semble rien faire.

327voto

jmfenoll Points 922

Essayez de réinstaller les paquets.

Dans la console NuGet, dites : Update-Package -Reinstall -ProjectName Your.Project.Name

Omettez le paramètre '-Project' si vous souhaitez réinstaller les paquets et restaurer les références pour l'ensemble de la solution.

http://www.overflowexception.es/2013/03/reinstalar-paquetes-de-nuget.html

44voto

Gan Points 1181

Vous devez Activer la restauration des paquets NuGet au niveau de la solution VS pour que la restauration du paquet manquant fonctionne.

enter image description here

13voto

John Hatton Points 722

Au cas où cela aiderait quelqu'un, pour moi, rien de ce qui précède n'était suffisant. Je ne pouvais toujours pas construire, VS ne pouvait toujours pas trouver les références. La clé était simplement de fermer et rouvrir la solution après avoir restauré les paquets.

Voici le scénario (avec Visual Studio 2012) :

Vous ouvrez une Solution dont les paquets sont manquants. Les références montrent que VS ne peut pas les trouver. Il y a de nombreuses façons pour restaurer les paquets manquants, notamment

  • construire une solution qui est configurée pour une restauration automatique
  • ouvrir la console du gestionnaire de paquets et cliquer sur le joli bouton "Restaurer".
  • en faisant nuget restore si vous avez installé la ligne de commande nuget

Mais quelle que soit l'approche adoptée, ces références seront toujours affichées comme manquantes. Et quand vous construirez, cela échouera. Soupir. Cependant, si vous fermez la solution et que vous la rouvrez, VS vérifie ces belles références. <HintPath> s'aperçoit que les paquets sont revenus à leur place et que tout va bien dans le monde.

Mise à jour

Est-ce que Visual Studio todavía ne voit pas que vous avez le paquet ? Il affiche toujours une référence qu'il ne peut pas résoudre ? Assurez-vous que la version du paquet que vous avez restauré est exactement la même que celle du paquet <HintPath> dans votre fichier .csproj. Même un numéro de correction de bogue mineur (par exemple, de 1.10.1 à 1.10.2) fera échouer la référence. Vous pouvez corriger ce problème soit en modifiant directement votre fichier .csproj, soit en supprimant la référence et en en créant une nouvelle qui pointe vers la version nouvellement restaurée dans le répertoire des paquets.

11voto

Juri Points 14330

Bien que la solution fournie par @jmfenoll fonctionne, elle met à jour les derniers paquets. Dans mon cas, ayant installé beta2 (prerelease), il a mis à jour toutes les librairies à RC1 (qui avait un bug). Ainsi, la solution ci-dessus ne fait que la moitié du travail.

Si vous êtes dans la même situation que moi et que vous souhaitez synchroniser votre projet avec la version exacte des paquets NuGet que vous avez ou que vous avez spécifié dans votre packages.config alors, alors ce script pourrait vous aider. Il suffit de le copier et de le coller dans la console de votre gestionnaire de paquets.

function Sync-References([string]$PackageId) {
  get-project -all | %{
    $proj = $_ ;
    Write-Host $proj.name; 
    get-package -project $proj.name | ? { $_.id -match $PackageId } | % { 
      Write-Host $_.id; 
      uninstall-package -projectname $proj.name -id $_.id -version $_.version -RemoveDependencies -force ;
      install-package -projectname $proj.name -id $_.id -version $_.version
    }
  }
}

Et ensuite l'exécuter soit avec un nom de paquet séparé comme

Sync-References AutoMapper

ou pour tous les paquets comme

Sync-References

Les crédits vont à Dan Haywood y son billet de blog .

8voto

Brant Bobby Points 4540

Le script suivant peut être exécuté dans la fenêtre de la console du gestionnaire de paquets, et supprimera tous les paquets de chaque projet de votre solution avant de les réinstaller.

foreach ($project in Get-Project -All) { 
    $packages = Get-Package -ProjectName $project.ProjectName
    foreach ($package in $packages) {
        Uninstall-Package $package.Id -Force -ProjectName $project.ProjectName
    }
    foreach ($package in $packages) {
        Install-Package $package.Id -ProjectName $project.ProjectName -Version $package.Version
    }
}

Ceci exécutera à nouveau l'install script de chaque paquet, ce qui devrait restaurer les références d'assemblage manquantes. Malheureusement, toutes les autre Les choses que les scripts d'installation peuvent faire -- comme créer des fichiers et modifier les configurations -- se reproduiront également. Vous voudrez probablement commencer par une copie de travail propre, et utiliser votre outil SCM pour choisir les changements à conserver et ceux à ignorer dans votre projet.

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