Como faço para desinstalar * todos * os pacotes nuget de uma solução no Visual Studio

91

Eu sei que posso desinstalar o pacote do console PM. Tive alguns problemas de dependência com outro projeto e quero começar de novo, e preciso excluir todos os pacotes de uma vez. Há algum caminho?

dgorti
fonte

Respostas:

135

Para obter todos os pacotes de todos os projetos no uso da solução Get-Package. Para obter todos os pacotes de um uso de projeto específico Get-Package -ProjectName "YourProjectName".


Remova todos os pacotes de todos os projetos da solução

Cuidado: Isso desinstalará TODOS os pacotes da solução . Se o -Forceparâmetro for usado, os pacotes serão removidos mesmo que existam dependências.

Get-Package | Uninstall-Package -RemoveDependencies -Force


Remova todos os pacotes de um projeto específico dentro de uma solução

Cuidado: Isso desinstalará TODOS os pacotes do projeto . Se o -Forceparâmetro for usado, os pacotes serão removidos mesmo que existam dependências.

Get-Package -ProjectName "YourProjectName" | 
Uninstall-Package -ProjectName "YourProjectName" -RemoveDependencies -Force
normando
fonte
27
Eu recomendo adicionar o parâmetro -Force no final. Sem ele, não consigo desinstalar todas as minhas dependências com base nas dependências de outros pacotes NuGet.
Sean Stayns
Esta é a verdadeira resposta. Combinado com a sugestão de uso de Sean -force. Isso funcionou para mim.
Spikee
86

No console do gerenciador de pacotes, basta digitar:

get-package | desinstalar-pacote -removedependencies

Vladimir Zalmanek
fonte
14
Para não ficar preso em um gráfico de dependência complexo, use -Forceswitch.
Alireza
12
AVISO: Este comendamento irá desinstalar todos os pacotes dentro de toda a SOLUÇÃO.
Jacob
31

tente isto:

get-package | uninstall-package -removedependencies -force
AHA
fonte
15

Se você deseja desinstalar todos os pacotes NuGet de todos os projetos em uma solução, use isso no console do gerenciador de pacotes 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
fonte
4
Ótima resposta. Roteiro para um único projeto:$packages = Get-Package -ProjectName MyProjectName; foreach($package in $packages){ Uninstall-Package -ProjectName MyProjectName -Id $package.Id -Force}
Mohsen Afshin
10

Usar o parâmetro -Force no meu caso deixou modificações no arquivo do projeto e referências a alguns binários que deveriam ter sido removidos ao desinstalar normalmente os pacotes.

Aqui está um método ingênuo para desinstalar todos os pacotes de projetos específicos sem usar o parâmetro -Force. Efetivamente, ele tenta desinstalar os pacotes repetidamente até que não haja mais pacotes, então você verá alguns erros mencionando pacotes dependentes (se os tiver), mas eles aparecerão cada vez menos conforme os pacotes folha forem removidos a cada iteração.

Também vale a pena mencionar que testei apenas os seguintes snippets do PowerShell no console PackageManager. ("Ferramentas> Gerenciador de pacotes NuGet> Console do gerenciador de pacotes")

Desinstale todos os pacotes de todos os projetos em uma solução

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

Remova apenas projetos que contenham a palavra " 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 }

Observe que se você tiver outro problema além dos pacotes dependentes que impedem a desinstalação do pacote, este snippet será executado para sempre até que você o interrompa manualmente.

Nathan
fonte
3

Eu não acredito que isso seja possível, então desinstale TODOS os pacotes de uma vez. No entanto, como você já indicou, você pode desinstalar um pacote, mas também pode instruí-lo a desinstalar suas dependências fazendo o seguinte:

Desinstalar pacote OpenIdPortableArea –RemoveDependencies

Aqui está um blog de Marcus Hammarberg explicando isso: http://www.marcusoft.net/2011/02/nuget-uninstall-remove-dependencies.html

empréstimo.burger
fonte
3
"Remover dependências" funciona quando um pacote depende de muitos outros. Não funciona quando N pacotes dependem do núcleo (por exemplo, Boost). Você precisa remover os pacotes NuGet Boost manualmente um por um, o que é uma dor.
quant_dev
1

Atualizado um script para remover todos os pacotes nuget para um único projeto na solução VS:

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

Fictício da velha escola para loop:

$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++
    }
}
Teoman shipahi
fonte
0

Restauração automática (desinstale e instale) de pacotes em um projeto usando o Console do gerenciador de pacotes:

Update-Package -Reinstall

Mariusz
fonte