Delen via


De globale pakketten, HTTP-cache en tijdelijke mappen beheren

Wanneer u een pakket installeert, bijwerkt of herstelt, beheert NuGet pakketten en pakketgegevens in verschillende mappen buiten uw projectstructuur:

Naam Locatie
global-packages
  • Ramen: %userprofile%\.nuget\packages
  • Mac/Linux: ~/.nuget/packages
  • Overschrijven met behulp van de omgevingsvariabele NUGET_PACKAGES, de globalPackagesFolder of repositoryPathconfiguratie-instellingen (bij gebruik van PackageReference en packages.config, respectievelijk) of de RestorePackagesPath eigenschap MSBuild (alleen MSBuild). De omgevingsvariabele heeft voorrang op de configuratie-instelling.
http-cache
  • Ramen: %localappdata%\NuGet\v3-cache
  • Mac/Linux: ~/.local/share/NuGet/v3-cache
  • Overschrijven met behulp van de omgevingsvariabele NUGET_HTTP_CACHE_PATH.
Temp
  • Ramen: %temp%\NuGetScratch
  • Mac: /tmp/NuGetScratch
  • Linux: /tmp/NuGetScratch<username>
  • Overschrijven met behulp van de omgevingsvariabele NUGET_SCRATCH.
  • plugins-cache4.8+
    • Ramen: %localappdata%\NuGet\plugins-cache
    • Mac/Linux: ~/.local/share/NuGet/plugins-cache
    • Overschrijven met behulp van de omgevingsvariabele NUGET_PLUGINS_CACHE_PATH.

    Door de map global-packages te gebruiken, voorkomt NuGet over het algemeen het downloaden van pakketten die al op de computer aanwezig zijn, waardoor de prestaties van installatie-, update- en herstelbewerkingen worden verbeterd. Wanneer u PackageReference gebruikt, voorkomt de map global-packages ook dat gedownloade pakketten in projectmappen worden bewaard, waar ze mogelijk onbedoeld worden toegevoegd aan broncodebeheer en de algehele impact van NuGet op computeropslag vermindert.

    Wanneer u wordt gevraagd een pakket op te halen, kijkt NuGet eerst in de map global-packages . Als de exacte versie van het pakket er niet is, controleert NuGet alle niet-HTTP-pakketbronnen. Als het pakket nog steeds niet wordt gevonden, zoekt NuGet naar het pakket in de http-cache , tenzij u opgeeft --no-http-cache met dotnet.exe opdrachten of -NoHttpCache met nuget.exe opdrachten. Als het pakket zich niet in de HTTP-cache bevindt of als de HTTP-cache niet wordt gebruikt, haalt NuGet het pakket vervolgens op via HTTP.

    Zie Wat gebeurt er wanneer een pakket is geïnstalleerd? voor meer informatie.

    globale-pakketten

    De map global-packages is waar NuGet elk gedownload pakket installeert. Elk pakket wordt volledig uitgevouwen in een submap die overeenkomt met de pakket-identificatie en het versie-nummer. Projecten die de PackageReference-indeling gebruiken, gebruiken altijd pakketten rechtstreeks vanuit deze map. Wanneer u de packages.configgebruikt, worden pakketten geïnstalleerd in de map global-packages en vervolgens gekopieerd naar de map van packages het project.

    De map met globale pakketten opschonen

    De map met globale pakketten moet handmatig worden opgeschoond om pakketten te verwijderen die niet meer worden gebruikt. U kunt dit doen met de dotnet nuget locals global-packages --clear opdracht of de knop 'Lokale NuGet-resources wissen' in de opties van Visual Studio (gelijk aan dotnet nuget locals all --clear). Nadat u de map met globale pakketten hebt gewist, moet u uw projecten opnieuw herstellen om alle vereiste pakketten opnieuw te downloaden. In Visual Studio moet u uw oplossing mogelijk opnieuw laden om de cache 'up-to-date restores' van NuGet te wissen of een opdrachtregelherstel uit te voeren (bijvoorbeeld in het terminalvenster van Visual Studio) met msbuild -t:restore your.sln.

    Als u alleen ongebruikte pakketten wilt opschonen, is dit een proces in twee stappen. Ten eerste is er een nuget.config instelling updatePackageLastAccessTime die moet worden ingeschakeld. Deze instelling zorgt ervoor dat NuGet het bestand van .nupkg.metadata elk pakket bijwerkt wanneer het wordt gebruikt in een herstelbewerking. Wanneer herstel wordt uitgevoerd, maar een project als al up-to-date wordt beschouwd, worden de tijdstempels van het pakket niet bijgewerkt. Als de herstelinvoer van een project dus enkele weken niet verandert, worden de tijdstempels van de .nupkg.metadata bestanden niet bijgewerkt. Het .nupkg.metadata bestand is het laatste bestand dat NuGet maakt bij het downloaden en extraheren van pakketten tijdens een herstel of installatie, en is het bestand dat wordt gebruikt om te controleren of een pakket is geëxtraheerd.

    Voer ten tweede een hulpprogramma uit om het opschonen uit te voeren. Nadat de updatePackageLastAccessTime instelling is ingeschakeld, raden we u aan een paar dagen te wachten om ervoor te zorgen dat alle pakketten die u regelmatig gebruikt, hun tijdstempels hebben bijgewerkt.

    Op dit moment biedt NuGet geen hulpprogramma of opdracht om dit te doen. U kunt een 👍 reactie toevoegen aan dit GitHub-probleem om uw interesse aan te geven. Sommige communityleden hebben hun eigen opensource NuGet-schonere hulpprogramma's gemaakt waarnaar u kunt zoeken.

    Als u uw eigen opschoonprogramma gaat schrijven, is het belangrijk dat het .nupkg.metadata bestand wordt verwijderd als een van de andere pakketbestanden wordt verwijderd. Daarom raden we u aan om dit bestand eerst te verwijderen. Anders kunnen projecten die verwijzen naar het pakket onverwacht gedrag hebben. Als u een opschoonprogramma schrijft in .NET, kunt u overwegen om ConcurrencyUtilities.ExecuteWithFileLocked[Async](..) uit het NuGet.Common-pakket te gebruiken, waarbij u het volledige nupkg-pad van de pakketmap die u gaat verwijderen als sleutel doorgeeft, om te voorkomen dat een pakket wordt verwijderd dat herstel tegelijkertijd probeert te extraheren. De map met globale pakketten kan programmatisch worden gevonden met het NuGet.Configuration-pakket. Gebruik Settings.LoadDefaultSettings(path) om een ISettings instantie op te halen (u kunt null als pad doorgeven of een map doorgeven als u oplossingen wilt verwerken met een nuget.config die de globale-pakkettenmap omleidt) en gebruik vervolgens SettingsUtility.GetGlobalPackagesFolder(settings). U kunt ook uitvoeren dotnet nuget locals global-packages --list als een onderliggend proces en de uitvoer parseren.

    HTTP-cache

    NuGet slaat kopieën van de meeste NuGet-feedcommunicatie (met uitzondering van zoekopdrachten) op in submappen voor elke pakketbron. Pakketten worden niet uitgevouwen en bestanden met een laatst gewijzigde datum ouder dan 30 minuten worden doorgaans beschouwd als verlopen.

    Met PackageReference restore wordt de lijst met versies die een bron bevat in de cache opgeslagen. Als er dus een nieuwe versie van een pakket wordt gepubliceerd en u deze sneller wilt gebruiken dan de verloopperiode van de cache van 30 minuten, kunt u de http-cache wissen om het herstellen af te dwingen om sneller te controleren op een nieuwere versie.

    temperatuur

    Een map waarin NuGet tijdelijke bestanden kan opslaan tijdens de verschillende bewerkingen.

    Als er meerdere NuGet-bewerkingen parallel worden uitgevoerd, bijvoorbeeld één computer waarop meerdere CI-agents worden uitgevoerd, is het belangrijk dat alle processen dezelfde tijdelijke map (NuGetScratch) delen. NuGet maakt gebruik van de tijdelijke map om de toegang tussen processen tot de mappen http-cache en global-packages te coördineren met behulp van bestandssysteemvergrendelingen. Als verschillende processen verschillende tijdelijke mappen gebruiken, maar dezelfde map voor globale pakketten of http-cachemap, kunnen er allerlei fouten optreden bij het herstellen of installeren van pakketten. NuGet maakt geen gebruik van bestandssysteemvergrendeling om het herstellen van projecten te coördineren, dus twee verschillende processen die hetzelfde project tegelijkertijd proberen te herstellen, kunnen problemen ondervinden, zelfs wanneer dezelfde NuGetScratch map wordt gebruikt.

    plugin-cache

    Een map waarin NuGet de resultaten van de aanvraag voor bewerkingsclaims opslaat. Zie de referentie voor platformoverschrijdende invoegtoepassingen voor meer informatie.

    Maplocaties weergeven

    U kunt maplocaties weergeven met behulp van de dotnet nuget locals opdracht:

    dotnet nuget locals all --list
    

    Typische uitvoer (Windows; "user1" is de huidige gebruikersnaam):

    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
    

    Typische uitvoer (Mac; "user1" is de huidige gebruikersnaam):

    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
    

    Typische uitvoer (Linux; "user1" is de huidige gebruikersnaam):

    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
    

    Als u de locatie van één map wilt weergeven, gebruikt http-cacheu , global-packagesof tempplugins-cachein plaats van all.

    U kunt ook locaties bekijken met NuGet.exe met het locals commando:

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

    Lokale mappen wissen

    Command-line

    Als u problemen met pakketinstallatie ondervindt of op een andere manier ervoor wilt zorgen dat u pakketten installeert vanuit een externe galerie, gebruikt u de locals --clear optie (dotnet.exe) of locals -clear (nuget.exe), waarbij u de map opgeeft die u wilt wissen of all om alle mappen te wissen:

    # Clear the HTTP cache (use either command)
    dotnet nuget locals http-cache --clear
    nuget locals http-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
    

    Visual Studio

    Visual Studio ondersteunt het wissen van alle lokale mappen in de opties van NuGet Package Manager zoals te vinden onder de menuopdracht Tools > NuGet Package Manager > Package Manager Settings.

    Selecteer lokale NuGet-resources wissen op de pagina Algemeen. Zodra deze actie is gestart, kan deze actie niet worden geannuleerd. Er wordt een voortgangsbalk weergegeven en bevat de uiteindelijke status van de opdracht.

    In het uitvoervenster worden, wanneer de optie 'Uitvoer van Pakketbeheer' is geselecteerd, aanvullende details weergegeven over de clear-opdracht, inclusief eventuele foutberichten.

    Knop

    Zie NuGet-opties in Visual Studio voor meer informatie.

    Fouten oplossen

    De volgende fouten kunnen optreden bij het gebruik van nuget locals of dotnet nuget locals:

    • Fout: Het proces heeft geen toegang tot het bestandspakket <> omdat het wordt gebruikt door een ander proces of het wissen van lokale resources is mislukt: kan een of meer bestanden niet verwijderen

      Een of meer bestanden in de map worden door een ander proces gebruikt; Een Visual Studio-project is bijvoorbeeld geopend dat verwijst naar pakketten in de map global-packages . Sluit deze processen en probeer het opnieuw.

    • Fout: de toegang tot het padpad <> is geweigerd of de map is niet leeg

      U bent niet gemachtigd om bestanden in de cache te verwijderen. Wijzig indien mogelijk de mapmachtigingen en probeer het opnieuw. Neem anders contact op met uw systeembeheerder.

    • Fout: het opgegeven pad, de bestandsnaam of beide zijn te lang. De volledig gekwalificeerde bestandsnaam moet kleiner zijn dan 260 tekens en de mapnaam moet kleiner zijn dan 248 tekens.

      Verkort de mapnamen en probeer het opnieuw.