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.
  • Windows: %userprofile%\.nuget\packages
  • Mac/Linux: ~/.nuget/packages
  • Substitua usando a variável de ambiente NUGET_PACKAGES, as definições de configuração de globalPackagesFolder ou repositoryPath (ao usar PackageReference e packages.config, respectivamente) ou a propriedade do MSBuild RestorePackagesPath (somente MSBuild). A variável de ambiente tem precedência sobre a definição de configuração.
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.
  • Windows: %localappdata%\NuGet\v3-cache
  • Mac/Linux: ~/.local/share/NuGet/v3-cache
  • Substitua usando a variável de ambiente NUGET_HTTP_CACHE_PATH.
temp Uma pasta em que o NuGet armazena arquivos temporários durante suas várias operações.
  • Windows: %temp%\NuGetScratch
  • Mac: /tmp/NuGetScratch
  • Linux: /tmp/NuGetScratch<username>
  • Substitua usando a variável de ambiente NUGET_SCRATCH.
  • plugins-cache 4.8+ Uma pasta na qual o NuGet armazena os resultados da solicitação de declarações de operação.
    • Windows: %localappdata%\NuGet\plugins-cache
    • Mac/Linux: ~/.local/share/NuGet/plugins-cache
    • Substitua usando a variável de ambiente NUGET_PLUGINS_CACHE_PATH.

    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.

    NuGet option command for clearing caches

    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.