NUGET | Eliminare le vecchie versioni dei pacchetti in locale
Script PowerShell che pulisce la cache locale dei pacchetti NuGet mantenendo solo l'ultima versione di ognuno ed eliminando le precedenti, recuperando spazio su disco.
Durante lo sviluppo capita di aggiungere e aggiornare di continuo pacchetti NuGet. Ad ogni aggiornamento la nuova versione viene scaricata, ma le versioni precedenti restano sul disco nella cache locale, accumulandosi nel tempo senza essere più utilizzate. Con qualche anno di lavoro su più progetti si arriva facilmente a sprecare diversi GB.
Lo script PowerShell che trovi in fondo all’articolo analizza la cartella dei pacchetti NuGet e, per ogni pacchetto, mantiene solo l’ultima versione eliminando tutte le precedenti, riportando alla fine quanto spazio è stato recuperato.
Dove si trovano i pacchetti
La cache locale dei pacchetti NuGet si trova, per impostazione predefinita, in:
C:\Users\<nome_utente>\.nuget\packages
Dentro packages ogni pacchetto ha una sottocartella, e dentro questa una sottocartella per ogni versione installata. È proprio su queste ultime che agisce lo script.
Come si usa
Scarica il file Clean-NuGetPackages.ps1 (link in fondo all’articolo). Per impostazione predefinita pulisce la cartella %USERPROFILE%\.nuget\packages, quindi puoi lanciarlo da qualsiasi percorso; in alternativa copialo direttamente nella cartella .nuget del tuo profilo utente.
Apri PowerShell e, prima di tutto, esegui sempre l’anteprima con -WhatIf per vedere cosa verrebbe cancellato senza toccare nulla:
.\Clean-NuGetPackages.ps1 -WhatIf
Una volta verificato l’esito, lancia la pulizia reale:
.\Clean-NuGetPackages.ps1
Se PowerShell blocca l’esecuzione dello script, abilita temporaneamente l’esecuzione nella sessione corrente con
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass.
I parametri
-PackagesPath <percorso>— la cartella dei pacchetti da pulire. Default:%USERPROFILE%\.nuget\packages. Utile se hai spostato la cache in un percorso personalizzato.-KeepPreRelease— non cancella mai le versioni prerelease / beta / rc / preview (quelle con suffisso, es.1.0.0-beta,2.0.0-rc1). Tra le versioni stabili tiene comunque solo l’ultima; se un pacchetto ha solo prerelease, le conserva tutte.-WhatIf— modalità anteprima: mostra cosa verrebbe eliminato e quanto spazio si recupererebbe, senza cancellare nulla. Consigliato eseguirlo sempre prima della pulizia vera.
Qualche combinazione d’esempio:
.\Clean-NuGetPackages.ps1 -WhatIf # anteprima, non cancella
.\Clean-NuGetPackages.ps1 # tiene solo l'ultima versione
.\Clean-NuGetPackages.ps1 -KeepPreRelease # preserva le prerelease/beta
.\Clean-NuGetPackages.ps1 -KeepPreRelease -WhatIf # anteprima con preservazione
Il confronto tra versioni è semver-aware (numerico, non alfabetico): quindi 13.0.4 è più recente di 9.0.1, e una release stabile vince su una prerelease con lo stesso numero (es. 9.0.0 > 9.0.0-rc1).
Attenzione: senza
-WhatIfl’eliminazione è definitiva e irreversibile. I pacchetti rimossi verranno eventualmente riscaricati da NuGet alla prossima compilazione che ne ha bisogno.
Scarica lo script
⬇ Scarica Clean-NuGetPackages.ps1
Leggi anche: