Gestione delle cartelle dei pacchetti globale, della cache e temporanea

Quando si installa, aggiorna o ripristina un pacchetto, NuGet gestisce i pacchetti e le informazioni sui pacchetti in varie cartelle all'esterno della struttura del progetto:

Nome Descrizione e posizione (per utente)
pacchetti globali La cartella global-packages è la posizione in cui NuGet installa i pacchetti scaricati. Ogni pacchetto viene espanso completamente in una sottocartella corrispondente all'identificatore del pacchetto e al numero di versione. I progetti che usano il formato PackageReference usano sempre i pacchetti direttamente da questa cartella. Quando si usa il file packages.config, i pacchetti vengono installati nella cartella global-packages e quindi copiati nella cartella packages del progetto.
  • Windows: %userprofile%\.nuget\packages
  • Mac/Linux: ~/.nuget/packages
  • Eseguire l'override usando la variabile di ambiente NUGET_PACKAGES, le impostazioni di configurazioneglobalPackagesFolder o repositoryPath (rispettivamente quando si usa PackageReference e packages.config) o la proprietà MSBuild RestorePackagesPath (solo MSBuild). La variabile di ambiente ha la precedenza rispetto all'impostazione di configurazione.
http-cache Gestione pacchetti di Visual Studio (NuGet 3.x+) e lo strumento dotnet archiviano copie dei pacchetti scaricati nella cache (salvati come file .dat), organizzati in sottocartelle per ogni origine di pacchetti. I pacchetti non vengono espansi e la cache ha una scadenza di 30 minuti.
  • Windows: %localappdata%\NuGet\v3-cache
  • Mac/Linux: ~/.local/share/NuGet/v3-cache
  • Eseguire l'override usando la variabile di ambiente NUGET_HTTP_CACHE_PATH.
temp Cartella in cui NuGet archivia i file temporanei durante le varie operazioni.
  • Windows: %temp%\NuGetScratch
  • Mac: /tmp/NuGetScratch
  • Linux: /tmp/NuGetScratch<username>
  • Eseguire l'override usando la variabile di ambiente NUGET_SCRATCH.
  • plugins-cache 4.8+ Cartella in cui NuGet archivia i risultati dalla richiesta di attestazioni delle operazioni.
    • Windows: %localappdata%\NuGet\plugins-cache
    • Mac/Linux: ~/.local/share/NuGet/plugins-cache
    • Eseguire l'override usando la variabile di ambiente NUGET_PLUGINS_CACHE_PATH.

    Nota

    NuGet 3.5 e versioni precedenti usano la cartella packages-cache invece di http-cache, che si trova in %localappdata%\NuGet\Cache.

    Tramite le cartelle della cache e global-packages, NuGet evita in genere il download di pacchetti già esistenti nel computer, con conseguente miglioramento delle prestazioni di installazione, aggiornamento e ripristino. Quando si usa PackageReference, la cartella global-packages consente anche di evitare di mantenere i pacchetti scaricati all'interno delle cartelle di progetto, da cui potrebbero essere inavvertitamente aggiunti al controllo del codice sorgente, nonché di ridurre l'impatto complessivo di NuGet sullo spazio di archiviazione del computer.

    Quando viene richiesto di recuperare un pacchetto, NuGet controlla prima di tutto nella cartella global-packages. Se nella cartella non è disponibile la versione esatta del pacchetto, NuGet controlla tutte le origini di pacchetti non HTTP. Se il pacchetto non viene trovato, NuGet cerca il pacchetto nella cartella http-cache a meno che non si specifichi --no-http-cache con i comandi dotnet.exe o -NoHttpCache con i comandi nuget.exe. Se il pacchetto non è presente nella cache o la cache non viene usata, NuGet recupera il pacchetto tramite HTTP.

    Per altre informazioni, vedere Cosa accade quando viene installato un pacchetto.

    Visualizzazione delle posizioni delle cartelle

    È possibile visualizzare le posizioni con il comando nuget locals:

    # Display locals for all folders: global-packages, http cache, temp and plugins cache
    nuget locals all -list
    

    Output tipico (Windows; "user1" è il nome utente corrente):

    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
    

    (la cartella package-cache viene usata in NuGet 2.x e visualizzata con NuGet 3.5 e versioni precedenti.)

    È anche possibile visualizzare le posizioni delle cartelle con il comando dotnet nuget locals:

    dotnet nuget locals all --list
    

    Output tipico (Mac; "user1" è il nome utente corrente:

    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
    

    Output tipico (Linux; "user1" è il nome utente corrente:

    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
    

    Per visualizzare la posizione di una singola cartella, usare http-cache, global-packages, temp o plugins-cache invece di all.

    Cancellazione delle cartelle locali

    Se si verificano problemi di installazione dei pacchetti o si vuole essere certi di eseguire l'installazione dei pacchetti da una raccolta remota, usare l'opzione locals --clear (dotnet.exe) o locals -clear (nuget.exe), specificando la cartella da cancellare oppure all per cancellare tutte le cartelle:

    # 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
    

    Gli eventuali pacchetti usati dai progetti aperti in Visual Studio non vengono cancellati dalla cartella global-packages.

    A partire da Visual Studio 2017, usare il comando di menu Strumenti > NuGet Gestione pacchetti > Gestione pacchetti Impostazioni, quindi selezionare Cancella tutte le cache NuGet. La gestione delle cache non è attualmente disponibile tramite la console di Gestione pacchetti. In Visual Studio 2015 usare invece i comandi dell'interfaccia della riga di comando.

    NuGet option command for clearing caches

    Risoluzione degli errori

    Durante l'uso di nuget locals o dotnet nuget locals possono verificarsi gli errori seguenti:

    • Errore: Il processo non è in grado di accedere al pacchetto di file <perché viene usato da un altro processo o la cancellazione delle risorse locali non è riuscita: impossibile eliminare uno o> più file

      Uno o più file nella cartella sono in uso da un altro processo. Ad esempio, è aperto un progetto di Visual Studio che fa riferimento ai pacchetti nella cartella global-packages. Chiudere i processi e riprovare.

    • Errore: l'accesso al percorso <> è negato o La directory non è vuota

      Non si è autorizzati a eliminare i file nella cache. Modificare le autorizzazioni della cartella, se possibile, e riprovare. In caso contrario, contattare l'amministratore di sistema.

    • Errore: Percorso e/o nome di file specificato troppo lungo. Il nome di file completo deve contenere meno di 260 caratteri, mentre il nome di directory deve contenere meno di 248 caratteri.

      Abbreviare i nomi delle cartelle e riprovare.