Como excluo pacotes NuGet que não são referenciados por nenhum projeto na minha solução?

141

De alguma forma, durante a atualização para o VS2012 e .NET 4.5, eu consegui confundir o NuGet. Existem pacotes que aparecem no gerenciador de pacotes (e na pasta packages) que não consigo excluir (acredito que sejam pacotes herdados do ASP.NET NuGet que foram substituídos por novos nomes de pacotes pela nova versão. Cada um deles possui apenas um botão Gerenciar - mas nenhum botão de desinstalação E quando você olha para ver onde eles são usados, pode ver que eles não são referenciados por nenhum dos projetos da solução? Eles NÃO estão exibindo uma desinstalação?

Howard Pinsley
fonte

Respostas:

108

Você pode usar o Console do Gerenciador de Pacotes com o comando: Uninstall-Package PackageIdpara removê-lo ou apenas excluir a pasta do pacote da pasta 'packages' na pasta da solução. Você pode encontrar mais informações sobre o Package Manager Console aqui: http://docs.nuget.org/docs/reference/package-manager-console-powershell-reference

Pavel Bakshy
fonte
8
Obrigado Pavel. Tive a sensação de que você poderia excluir as pastas. É um pouco desconcertante, porque eu tenho que garantir manualmente que nenhum dos pacotes seja referenciado (eles não parecem ser). Ainda estou curioso para saber por que o gerenciador de pacotes não mostra um botão Desinstalar (ou remover).
Howard Pinsley
2
O gerenciador de pacotes no nível da solução exibe todas as referências de pacotes aos projetos da solução e todos os pacotes adicionais colocados na pasta packages, mas não mencionados. Para esses pacotes, não há capacidade de desinstalação na interface do usuário. Concordo que é resultado de comportamento incorreto, mas, neste caso, você deve verificá-lo manualmente. E exclua o pacote ou reinstale-o quando tiver certeza de que precisa ou não.
Pavel Bakshy
1
Ao remover a pasta e voltar ao NuGet e ver o pacote, ele ainda é exibido como instalado com a marca verde ao lado; é melhor fazer a desinstalação adequada usando o console.
K80sg
1
@ysrb, é um comando PowerShell que vai verbo-substantivo, como get-usuário ou remove-item, seu exemplo é substantivo-verbo
Nick Young
1
@ syrb Como Nick Young diz, e além disso, seria um elogio horrendo Install-Package.
ProfK
159

Eu encontrei uma solução alternativa para isso.

  1. Ativar restauração de pacotes e verificação automática (Opções / Gerenciador de Pacotes / Geral)
  2. Exclua todo o conteúdo da pasta packages (para a Lixeira, se estiver nervoso!)
  3. Gerenciar pacotes Nuget para solução
  4. Clique no botão restaurar.

O NuGet restaurará apenas os pacotes usados ​​na sua solução. Você acaba com um bom conjunto simplificado de pacotes.

James L
fonte
1
Isso não removerá o pacote packages.confige não removerá as referências do projeto?
CodeCaster
1
@CodeCaster difícil de analisar o seu duplo negativo. Nada será removido da configuração e das referências. A idéia aqui é para remover os pacotes NuGet que não são mais referenciados
James L
1
Excelente resposta! Se você estiver usando o TFS, exclua todo o conteúdo dentro de ./packages no explorador do país de origem primeiro para que outros clientes, como máquinas de construção, também removam itens redundantes.
Alexander Schmidt
4
@ sprinter252, se você estiver usando a restauração de pacotes, não deve verificar os pacotes no controle de origem em primeiro lugar. Esse é um dos principais benefícios do uso da restauração de pacotes. Como parte da conversão para restauração de pacotes, uma regra 'ignorar' deve ser colocada na pasta packages.
Carl Bussema
@CarlBussema Você está certo. Desde a nova versão do NuGet, isso não é tão importante porque o Nuget não adiciona binários às subpastas. Então você está apenas recebendo a estrutura de pastas. Meu comentário foi relacionado ao comportamento padrão do TFS (pasta de pacotes incluída). No TFS Anywhere, os ignorados são ignorados com frequência ;-). Importante para projetos mistos com o Xamarin.
Alexander Schmidt
17

Primeiro abra o Console do Gerenciador de Pacotes. Em seguida, selecione seu projeto na lista suspensa. E execute os seguintes comandos para desinstalar pacotes nuget.

Get-Package

para obter todo o pacote que você instalou.

e depois

Uninstall-Package PagedList.Mvc

--- para desinstalar um pacote chamado PagedList.MVC

mensagem

PM> Uninstall-Package PagedList.Mvc
Successfully removed 'PagedList.Mvc 4.5.0.0' from MCEMRBPP.PIR.
Abdus Salam Azad
fonte
Essa resposta funcionou perfeitamente para mim. Minha situação era que o pacote só aparecia na guia Atualizações da caixa de diálogo ... e quando eu bati em Atualizar, nenhum projeto tinha o pacote instalado - portanto, não havia como atualizá-lo ou removê-lo.
azarc3
8

Se você deseja excluir / desinstalar o pacote Nuget que é aplicado a vários projetos em suas soluções , acesse:

  1. Ferramentas-> Gerenciador de Pacotes Nuget -> Gerenciar Pacotes Nuget para Solução

  2. Na coluna da esquerda, onde está 'Pacotes instalados', selecione 'Todos', para que você veja uma lista de pacotes instalados e o botão Gerenciar.

  3. Selecione o botão Gerenciar e você será exibido, desmarque a caixa de seleção no nome do projeto e Ok

O restante do trabalho do Gerenciador de Pacotes fará isso por você.


fonte
1
Esta é definitivamente a resposta que eu estava procurando, obrigado!
Sal
3

Se você removeu o pacote usando o utilitário Uninstall-Package e excluiu o pacote desejado do diretório package na solução (e ainda está recebendo um erro), basta abrir o arquivo * .csproj no editor de código e remover a tag manualmente. Como por exemplo, eu queria me livrar do pacote Nuget Xamarin.Forms.Alias e removemos essas linhas do arquivo * .csproj.

Removendo o pacote nuget do script msbuild

E, finalmente, não se esqueça de recarregar seu projeto uma vez solicitado no Visual Studio (depois de alterar o arquivo do projeto). Eu tentei no Visual Studio 2015, mas deve funcionar no Visual Studio 2010 e em diante também.

Espero que isto ajude.

AB
fonte
2

Uma alternativa é instalar o pacote não utilizado que você deseja excluir em qualquer projeto da sua solução; depois disso, desinstale-o e o Nuget também o removerá.

Um desinstalador adequado é necessário aqui.

D.Rosado
fonte
Existe uma maneira de desinstalar corretamente sem reinstalá-lo?
Knox
2

Solução 1

Use o pipeline do PowerShell para obter pacotes e remover em uma única declaração como esta

Get-Package | Uninstall-Package

Solução 2

se você deseja desinstalar os pacotes selecionados, siga estas etapas

  1. Use GetPackagespara obter a lista de pacotes
  2. Faça o download do software de texto Nimble
  3. Copie a saída de GetPackagesno NimbleText (para cada linha na janela da lista)
  4. Defina o Separador de Colunas como (se necessário
  5. Tipo Uninstall-Package $0(Substitua usando a janela padrão)
  6. Copie os resultados e cole-os no Package Manage Console

Isso é tudo pessoal.

irfandar
fonte
1

Um pacote NuGet pode fazer referência a outro pacote NuGet. Portanto, tenha muito cuidado com as dependências entre pacotes. Acabei de desinstalar um pacote de mapas do Google e, posteriormente, os pacotes subjacentes, como Newtonsoft, Entity Framework, etc.

Portanto, excluir manualmente um pacote específico da pasta packages seria mais seguro.

Aki
fonte
1

Na janela do console do Gerenciador de Pacotes, geralmente qualquer comando usado para instalar um pacote pode ser usado para desinstalar esse pacote. Simplesmente substitua o comando INSTALL por UNINSTALL .

Por exemplo, para instalar o PowerTCPTelnet, o comando é:

Install-Package PowerTCPTelnet -Version 4.4.9

Para desinstalar o mesmo, o comando é:

Uninstall-Package PowerTCPTelnet -Version 4.4.9

Jazimov
fonte
1

VS2019> Ferramentas> Opções> Nuget Package Manager> Geral> Clique em "Limpar todos os cache de Nuger"

Harris
fonte
-2

De outra maneira, e muito simplesmente para mim, é:

  1. Vá para sua Soution e clique com o botão direito do mouse.

  2. Selecione a opção "Pacotes gerenciados de NUgets para solução". Isso abre uma janela pop-up, na qual clique no botão "Configurações". Isso abrirá outra janela pop-up e, em seguida, procure: "Gerenciador de Pacotes".

  3. Dentro da opção "Gerenciador de Pacotes", você tem mais duas opções (I. Geral II. Fontes de Pacotes) Em cada opção, desmarque todas as caixas de seleção.

Esta etapa desativa o NuGet do seu projeto.

Espero realmente ajudá-lo.

amedriveroperez
fonte
-2

Se você deseja usar a opção Visual Studio, consulte o link abaixo

http://spvenky.wordpress.com/2014/08/10/how-to-remove-nuget-packages-from-existing-visual-studio-solution/

Etapa 1: no Visual Studio, vá para Ferramentas / Gerenciador de pacotes NuGet / Gerenciar pacotes NuGet para solução…

Etapa 2: desmarque seus projetos da solução atual

Etapa 3: Desmarque o (s) projeto (s) e pressione OK

user1214835
fonte
2
É preferível escrever a resposta no StackOverflow, em vez de apenas postar um link, pois os links podem expirar no futuro.
Amadeus Sánchez