J'ai solution et projet dans Visual Studio 2012.
Le projet a un fichier packages.config
à la racine du projet.
Pour les besoins de cette question, supposons que j'ai accidentellement supprimé ces bibliothèques de la section References
de mon projet.
En accédant au gestionnaire de paquets NuGet, l'interface coche toujours une coche à côté de ces paquets, indiquant qu'ils sont installés.
La seule façon pour moi de remédier à cette situation consiste à supprimer toutes les entrées de packages.config
, ce qui résoudra le problème de l'interface NuGet en les signalant comme étant installées, puis en rajoutant chacune d'elles.
Y a-t-il un moyen plus intelligent? J'avais espéré que l'activation de "permettre à nuget de restaurer les paquets manquants" résoudrait ce problème, mais cela ne semble rien faire.
Essayez de réinstaller les paquets .
Dans la console NuGet Package Manager, entrez la commande suivante:
Update-Package -Reinstall -ProjectName Your.Project.Name
Si vous souhaitez réinstaller des packages et restaurer des références pour l'ensemble de la solution, omettez le paramètre -ProjectName
.
Vous devez Activer la restauration du package NuGet au niveau de la solution du VS pour que le package de restauration manquant fonctionne.
Au cas où cela aiderait quelqu'un, rien de ce qui précède n'était suffisant pour moi. Je ne pouvais toujours pas construire, VS ne parvenait toujours pas à trouver les références. La clé consistait simplement à fermer et rouvrir la solution après la restauration des packages.
Voici le scénario (à l'aide de Visual Studio 2012):
Vous ouvrez une solution dont les packages sont manquants. Les références montrent que VS ne peut pas les trouver. Il y a plusieurs façons de restaurer les paquets manquants, y compris
nuget restore
si vous avez le nuget de ligne de commande installéMais quelle que soit l'approche, ces références seront toujours manquantes. Et lorsque vous construirez, cela échouera. Soupir. Toutefois, si vous fermez la solution et la rouvrez, VS vérifie à nouveau ces Nice <HintPath>
s, constate que les packages sont de retour à leur lieu d'origine et que tout va bien pour le monde.
Visual Studio n'a-t-il toujours pas vu que vous avez le package? Toujours afficher une référence qu'il ne peut pas résoudre? Assurez-vous que la version du package que vous avez restaurée est identique à la <HintPath>
de votre fichier .csproj. Même un numéro de correctif de bogue mineur (par exemple 1.10.1 à 1.10.2) fera échouer la référence. Vous pouvez résoudre ce problème soit en modifiant directement votre fichier XML csproj, soit en supprimant la référence et en en créant une nouvelle pointant vers la version récemment restaurée dans le répertoire packages.
Bien que la solution fournie par @jmfenoll fonctionne, elle met à jour les derniers packages. Dans mon cas, après avoir installé la version bêta2 (version préliminaire), toutes les bibliothèques ont été mises à jour vers RC1 (avec un bogue). 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 packages NuGet que vous avez/ou spécifiée dans votre packages.config
, alors, ce script peut vous aider. Copiez-le simplement dans votre console du gestionnaire de packages.
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 puis exécutez-le soit avec un nom de paquet distinct, comme
Sync-References AutoMapper
ou pour tous les paquets comme
Sync-References
Les crédits vont à Dan Haywood et son blog .
Le script suivant peut être exécuté dans la fenêtre de la console Gestionnaire de packages et supprimera tous les packages 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
}
}
Cela lancera à nouveau le script d'installation de chaque paquet, ce qui devrait restaurer les références d'assembly manquantes. Malheureusement, tous les autres trucs que peuvent installer les scripts - comme la création de fichiers et la modification de configurations - se reproduiront également. Vous voudrez probablement commencer avec une copie de travail vierge et utiliser votre outil SCM pour choisir les modifications à conserver dans votre projet et celles à ignorer.
J'ai ajouté les DLL manuellement. Cliquez avec le bouton droit sur Références dans le projet, sélectionnez Ajouter une référence, puis dans la boîte de dialogue, cliquez sur le bouton Parcourir. Les DLL NuGet se trouvaient dans le répertoire packages de la solution. Pour en obtenir le nom, vous pouvez cliquer avec le bouton droit de la souris sur des références dans un autre projet qui fonctionne correctement, sélectionner des propriétés et rechercher dans la propriété path.
Ce script réinstallera tous les packages d'un projet sans gâcher les dépendances ni installer des dépendances éventuellement supprimées. (Plus pour les développeurs de leur part.)
Update-Package -Reinstall -ProjectName Proteus.Package.LinkedContent -IgnoreDependencies
Dans Visual Studio 2015 (Soulution est sous contrôle de source, MVC-Project), le Update-Package -Reinstall -ProjectName Your.Project.Name
de csano fonctionnait, mais il y avait quelques verrouillages en écriture.
Je devais supprimer les "packages" -Folder manuellement avant. (Il semblait être verrouillé à cause du contrôle de source).
De plus, je devais réinstaller le paquet MVC à partir du gestionnaire de paquets NuGet.
Je suis d’accord avec @Juri pour dire que la réponse très populaire de jmfenoll n’est pas complète. Dans le cas de références cassées, je vous soumets que la plupart du temps, vous ne souhaitez pas mettre à jour le package latest, mais ne corrigez que vos références à les versions actuelles que vous utilisez. Et Juri a fourni une fonction pratique Sync-References
pour faire exactement cela.
Mais nous pouvons aller un peu plus loin, en offrant la possibilité de filtrer par projet et par paquet:
function Sync-References([string]$PackageId, [string]$ProjectName) {
get-project -all |
Where-Object { $_.name -match $ProjectName } |
ForEach-Object {
$proj = $_ ;
Write-Output ('Project: ' + $proj.name)
Get-Package -project $proj.name |
Where-Object { $_.id -match $PackageId } |
ForEach-Object {
Write-Output ('Package: ' + $_.id)
uninstall-package -projectname $proj.name -id $_.id -version $_.version -RemoveDependencies -force
install-package -projectname $proj.name -id $_.id -version $_.version
}
}
}
J'ai eu le même problème avec les références manquantes. Au-dessous de mon scénario:
Tous les numéros de version dans le projet et les packages correspondent, effectuer une restauration de nuget (de toutes ses manières) ne fonctionnait pas.
Comment j'ai corrigé: simplement supprimer les dossiers du paquet dans la racine de la solution et exécuter la restauration de nuget. À ce stade, les dll sont correctement téléchargées et peuvent être ajoutées pour les références manquantes.
Juste au cas où cela pourrait aider quelqu'un - Dans mon scénario, j'ai des bibliothèques partagées (qui ont leurs propres projets/solutions TFS), toutes combinées dans une seule solution.
Nuget restaurerait les projets avec succès, mais la DLL serait manquante.
Le problème sous-jacent était que, bien que votre solution dispose de son propre dossier de packages et qu'elle les ait restaurés correctement, le fichier de projet (par exemple .csproj) fait référence à un projet différent sur lequel le package n'a peut-être pas été téléchargé. Ouvrez le fichier dans un éditeur de texte pour voir d'où proviennent vos références.
Cela peut se produire lors de la gestion de packages sur différentes solutions partagées liées entre elles. Comme vous souhaitez probablement vous assurer que toutes les DLL sont au même niveau, vous pouvez le définir au niveau supérieur. Cela signifie que parfois, il cherchera une solution complètement différente pour un DLL référencé. Par conséquent, si vous n'avez pas tous les projets/solutions téléchargés et à jour, vous pouvez résoudre le problème ci-dessus. .
J'ai trop souffert de ce problème, dans mon cas, le téléchargement de NuGet manquant a été vérifié (mais cela ne les restaure pas) et je ne peux pas désinstaller et réinstaller, car j'ai modifié certains des packages installés ... donc:
Je viens de vider le cache et de reconstruire et cela a fonctionné. (Gestionnaire de paquets Tools-Option-Nuget - Général)
ce lien est également utile https://docs.nuget.org/consume/package-restore/migrating-to-automatic-package-restore .
Désactiver tous les paquets et supprimer les dépendances
$packages = Get-Package -ProjectName [nameOfProjectToRestore]
foreach ($package in $packages) {
uninstall-package -projectname [nameOfProjectToRestore] -id $package.Id -version $package.version -RemoveDependencies -force ;
}
Effacer le dossier des packages à la racine du projet
Copier le package.config modifie dans le dossier racine du site Web
Exécutez ce code pour restaurer le projet
$packages = Get-Package -ProjectName [nameOfProjectToRestore]
foreach ($package in $packages) {
uninstall-package -projectname [nameOfProjectToRestore] -id $package.Id -version $package.version -RemoveDependencies -force ;
}
foreach ($package in $packages) {
install-package $package.Id -ProjectName [nameOfProjectToRestore] -Version $package.Version
}