Como gerenciar as pastas de pacotes globais, de cache e temporárias
Sempre que você instala, atualiza ou restaura um pacote, o NuGet gerencia pacotes e informações do pacote em várias pastas fora da estrutura do seu projeto:
Nome | Descrição e localização (por usuário) |
---|---|
global-packages | A pasta global-packages é onde o NuGet instala qualquer pacote baixado. Cada pacote é totalmente expandido em uma subpasta que corresponde ao identificador de pacote e ao número de versão. Os projetos que usam o formato PackageReference sempre usam pacotes diretamente dessa pasta. Ao usar o packages.config, os pacotes são instalados na pasta global-packages, depois são copiados para a pasta packages do projeto.
|
http-cache | O Gerenciador de Pacotes do Visual Studio (NuGet 3.x ou posterior) e a ferramenta dotnet armazenam cópias de pacotes baixados nesse cache (salvos como arquivos .dat ), organizados em subpastas para cada origem de pacote. Os pacotes não são expandidos, e o cache tem um tempo de expiração de 30 minutos.
|
temp | Uma pasta em que o NuGet armazena arquivos temporários durante suas várias operações.%temp%\NuGetScratch /tmp/NuGetScratch /tmp/NuGetScratch<username> |
plugins-cache 4.8+ | Uma pasta na qual o NuGet armazena os resultados da solicitação de declarações de operação.
|
Observação
O NuGet 3.5 e versões anteriores usam packages-cache em vez de http-cache, que está localizado em %localappdata%\NuGet\Cache
.
Ao usar as pastas de cache e global-packages, geralmente o NuGet evita o download de pacotes que já existem no computador, melhorando o desempenho da instalação, atualização e restauração de operações. Quando PackageReference é usado, a pasta global-packages também evita o armazenamento de pacotes baixados dentro das pastas de projeto, onde eles podem ser inadvertidamente adicionados ao controle do código-fonte, e reduz o impacto geral do NuGet no armazenamento do computador.
Quando solicitado a recuperar um pacote, o NuGet primeiro examina a pasta global-packages. Se a versão exata do pacote não estiver lá, o NuGet verificará todas as origens de pacote não HTTP. Se ainda assim o pacote não for encontrado, o NuGet procurará o pacote no http-cache, a menos que você especifique --no-http-cache
com comandos dotnet.exe
ou -NoHttpCache
com comandos nuget.exe
. Se o pacote não estiver no cache ou se o cache não for usado, o NuGet recuperará o pacote via HTTP.
Para obter mais informações, confira O que acontece quando um pacote é instalado?.
Exibir os locais de pastas
É possível exibir os locais usando o comando nuget locals:
# Display locals for all folders: global-packages, http cache, temp and plugins cache
nuget locals all -list
Saída típica (Windows; "user1" é o nome de usuário atual):
http-cache: C:\Users\user1\AppData\Local\NuGet\v3-cache
global-packages: C:\Users\user1\.nuget\packages\
temp: C:\Users\user1\AppData\Local\Temp\NuGetScratch
plugins-cache: C:\Users\user1\AppData\Local\NuGet\plugins-cache
(package-cache
é usado no NuGet 2.x e aparece no NuGet 3.5 e versões anteriores).
Também é possível exibir os locais de pasta usando o comando dotnet nuget locals:
dotnet nuget locals all --list
Saída típica (Mac; "user1" é o nome de usuário atual):
info : http-cache: /home/user1/.local/share/NuGet/v3-cache
info : global-packages: /home/user1/.nuget/packages/
info : temp: /tmp/NuGetScratch
info : plugins-cache: /home/user1/.local/share/NuGet/plugins-cache
Saída típica (Linux; "user1" é o nome de usuário atual):
info : http-cache: /home/user1/.local/share/NuGet/v3-cache
info : global-packages: /home/user1/.nuget/packages/
info : temp: /tmp/NuGetScratchuser1
info : plugins-cache: /home/user1/.local/share/NuGet/plugins-cache
Para exibir a localização de uma única pasta, use http-cache
, global-packages
, temp
ou plugins-cache
em vez de all
.
Limpar pastas locais
Se você encontrar problemas de instalação do pacote ou se desejar garantir que esteja instalando pacotes de uma galeria remota, use a opção locals --clear
(dotnet.exe) ou locals -clear
(nuget.exe), especificando a pasta a ser limpa, ou all
para limpar todas as pastas:
# Clear the 3.x+ cache (use either command)
dotnet nuget locals http-cache --clear
nuget locals http-cache -clear
# Clear the 2.x cache (NuGet CLI 3.5 and earlier only)
nuget locals packages-cache -clear
# Clear the global packages folder (use either command)
dotnet nuget locals global-packages --clear
nuget locals global-packages -clear
# Clear the temporary cache (use either command)
dotnet nuget locals temp --clear
nuget locals temp -clear
# Clear the plugins cache (use either command)
dotnet nuget locals plugins-cache --clear
nuget locals plugins-cache -clear
# Clear all caches (use either command)
dotnet nuget locals all --clear
nuget locals all -clear
Todos os pacotes usados por projetos que estejam abertos no momento no Visual Studio não serão apagados da pasta global-packages.
Do Visual Studio 2017 em diante, use o comando de menu Ferramentas > Gerenciador de Pacotes NuGet > Configurações do Gerenciador de Pacotes e, em seguida, selecione Limpar Todos os Caches do NuGet. O gerenciamento de cache não está disponível atualmente por meio do Console do Gerenciador de Pacotes. No Visual Studio 2015, use os comandos da CLI.
Solução de problemas
Os seguintes erros podem ocorrer ao usar nuget locals
ou dotnet nuget locals
:
Erro: o processo não pode acessar o <pacote> de arquivos porque ele está sendo usado por outro processo ou Falha ao limpar os recursos locais: não é possível excluir um ou mais arquivos
Um ou mais arquivos da pasta estão em uso por outro processo. Por exemplo, um projeto do Visual Studio está aberto e se refere aos pacotes da pasta global-packages. Feche os processos e tente novamente.
Erro: o acesso ao caminho <path> foi negado ou O diretório não está vazio
Você não tem permissão para excluir arquivos no cache. Altere as permissões de pasta, se possível, e tente novamente. Senão, entre em contato com o administrador do sistema.
Erro: o caminho ou o nome de arquivo especificado, ou ambos, são muito longos. O nome de arquivo totalmente qualificado deve ter menos de 260 caracteres, e o nome do diretório deve ter menos de 248 caracteres.
Reduza os nomes de pasta e tente novamente.