Comment désinstaller * tous * les packages nuget d'une solution dans Visual Studio

90

Je sais que je peux désinstaller le package de la console PM. J'ai eu des problèmes de dépendance avec un autre projet et je veux recommencer, et je dois supprimer tous les packages d'un seul coup. Y a-t-il un moyen?

dgorti
la source

Réponses:

132

Pour obtenir tous les packages de tous les projets de la solution, utilisez Get-Package. Pour obtenir tous les packages d'un projet spécifique, utilisez Get-Package -ProjectName "YourProjectName".


Supprimer tous les packages de tous les projets de la solution

Attention: cela désinstallera TOUS les packages de la solution . Si le -Forceparamètre est utilisé, les packages sont supprimés même s'il existe des dépendances.

Get-Package | Uninstall-Package -RemoveDependencies -Force


Supprimer tous les packages d'un projet spécifique dans une solution

Attention: cela désinstallera TOUS les packages du projet . Si le -Forceparamètre est utilisé, les packages sont supprimés même s'il existe des dépendances.

Get-Package -ProjectName "YourProjectName" | 
Uninstall-Package -ProjectName "YourProjectName" -RemoveDependencies -Force
normand
la source
27
Je recommande d'ajouter le paramètre -Force à la fin. Sans cela, je ne peux pas désinstaller toutes mes dépendances basées sur des dépendances avec d'autres packages NuGet.
Sean Stayns
C'est la vraie réponse. Combiné avec la suggestion de Sean à utiliser -force. Cela a fonctionné pour moi.
Spikee
86

Dans la console du gestionnaire de package, tapez simplement:

get-package | désinstaller-package -removedependencies

Vladimir Zalmanek
la source
14
Pour ne pas rester coincé dans un graphe de dépendances complexe, utilisez -Forceswitch.
Alireza
12
AVERTISSEMENT: cette recommandation désinstallera tous les paquets de toute la SOLUTION.
Jacob
31

essaye ça:

get-package | uninstall-package -removedependencies -force
AHA
la source
15

Si vous souhaitez désinstaller chaque package NuGet de chaque projet d'une solution, utilisez ceci dans la console du gestionnaire de package NuGet:

foreach($project in $projects){ $packages = Get-Package -ProjectName $project.Name; foreach($package in $packages){ Uninstall-Package -ProjectName $project.Name -Id $package.Id -Force} }
Michal Steyn
la source
4
Très bonne réponse. Script pour un seul projet:$packages = Get-Package -ProjectName MyProjectName; foreach($package in $packages){ Uninstall-Package -ProjectName MyProjectName -Id $package.Id -Force}
Mohsen Afshin
10

L'utilisation du paramètre -Force dans mon cas a laissé des modifications du fichier de projet et des références à certains binaires qui auraient dû être supprimés lors de la désinstallation normale des packages.

Voici une méthode naïve pour désinstaller tous les packages de projets spécifiques sans utiliser le paramètre -Force. En fait, il essaie de désinstaller les paquets encore et encore jusqu'à ce qu'il ne reste plus de paquets, vous verrez donc des erreurs mentionnant des paquets dépendants (si vous en avez) mais ils apparaîtront de moins en moins à mesure que les paquets feuilles seront supprimés à chaque itération.

Il convient également de mentionner que je n'ai testé que les extraits de code PowerShell suivants dans la console PackageManager. ("Outils> Gestionnaire de package NuGet> Console du gestionnaire de package")

Désinstaller tous les packages de tous les projets d'une solution

while((Get-Project -All | Get-Package).Length -gt 0) { Get-Project -All | Get-Package | Uninstall-Package }

Supprimer uniquement les projets contenant le mot « WildCardSearch »

while((Get-Project -All | Where-Object ProjectName -like '*WildCardSearch*'  | Get-Package).Length -gt 0) { Get-Project -All | Where-Object ProjectName -like '*WildCardSearch*' | Get-Package | Uninstall-Package }

Notez que si vous rencontrez un autre problème en dehors des packages dépendants empêchant la désinstallation du package, cet extrait de code sera exécuté pour toujours jusqu'à ce que vous l'arrêtiez manuellement.

Nathan
la source
3

Je ne crois pas que cela soit possible, alors désinstallez TOUS les packages à la fois. Cependant, comme vous l'avez déjà indiqué, vous pouvez désinstaller un package, mais vous pouvez également lui dire de désinstaller ses dépendances en procédant comme suit:

Désinstaller-Package OpenIdPortableArea –RemoveDependencies

Voici un blog de Marcus Hammarberg expliquant cela: http://www.marcusoft.net/2011/02/nuget-uninstall-remove-dependencies.html

prêt.burger
la source
3
"Supprimer les dépendances" fonctionne lorsqu'un paquet dépend de beaucoup d'autres. Cela ne fonctionne pas lorsque N packages dépendent du core (par exemple Boost). Vous devez supprimer les packages NuGet Boost manuellement un par un, ce qui est pénible.
quant_dev
1

Dummy old-school pour boucle:

$packages = get-package
$packageId = "Apache.NMS.ActiveMQ"


$counter = 1
foreach($package in $packages){     
    if($package.Id -eq $packageId)
    {   
        Write-Host "`n$counter-Deleting Package:`n"
        $package        
        Uninstall-Package -Id $packageId -ProjectName $package.ProjectName -RemoveDependencies 
        Write-Host "`n============================================`n"
        $counter++
    }
}
Shipahi Teoman
la source
1

Mise à jour d'un script pour supprimer tous les packages nuget pour un seul projet dans la solution VS:

$projectName = "MyProjectName"; $packages = Get-Package -ProjectName $projectName; foreach($package in $packages){ Uninstall-Package -ProjectName $projectName -Id $package.Id -Force}
Vlad Setchin
la source
0

Restauration automatique (désinstallation puis installation) des packages dans un projet à l'aide de la console du gestionnaire de packages:

Update-Package -Réinstaller

Mariusz
la source