Jak wyczyścić pamięć podręczną pakietu NuGet za pomocą wiersza polecenia?

404

Mogę wyczyścić pamięć podręczną pakietów NuGet mojego komputera programistycznego za pomocą menu Visual Studio NarzędziaOpcjeMenedżer pakietów NuGetOgólne : Clear Package Cacheprzycisk.

Chciałbym to zrobić w wierszu poleceń. Niestety nie mogę znaleźć powiązanego przełącznika wiersza polecenia dla programu nuget.exe.

Przegapiłem coś?

g.pickardou
źródło
10
tej opcji brakuje w mojej wersji VS 2015
spankmaster79
1
tak, brakuje. Więc używam zaakceptowanej odpowiedzi.
g.pickardou
1
Dokument
Simon_Weaver

Odpowiedzi:

633

Po pierwsze, należy pobrać narzędzie wiersza poleceń Nuget od tutaj .

Następnie otwórz wiersz polecenia i przejdź cddo katalogu, do którego nuget.exezostał pobrany.

Możesz wyświetlić listę lokalnych pamięci podręcznych za pomocą tego polecenia:

nuget locals all -list

Możesz wyczyścić wszystkie pamięci podręczne za pomocą tego polecenia:

nuget locals all -clear

Odniesienie: https://docs.nuget.org/consume/command-line-reference

rm8x
źródło
10
Działa ładnie dla 3.3, ale tylko dla bieżącego użytkownika - miałem problem z uszkodzoną lokalną pamięcią podręczną na naszym serwerze kompilacji, który (niestety) działał w systemie lokalnym, więc pamięci podręcznej nie ma na liście - rzeczywista lokalizacja to `C: \ Windows \ SysWOW64 \ config \ systemprofile \ AppData \ Local \ NuGet \ Cache`
Zhaph - Ben Duguid
1
Może powinieneś uruchomić operację czyszczenia dla tego samego użytkownika co operacja kompilacji. Albo przez skonfigurowanie dedykowanego użytkownika kompilacji, albo za pomocą sztuczki, aby uruchomić czyszczenie w systemie lokalnym.
g.pickardou 26.04.16
2
Czy są jakieś możliwości usunięcia określonego NuGet z pamięci podręcznej? na przykład: Chcę usunąć NuGet X z pamięci podręcznej i nie znam lokalizacji pamięci podręcznej NuGet, w tej sytuacji, jak usunąć sam „X” z pamięci podręcznej
3610920
19
Musiałem uruchomić nuget update -selfzaktualizować nuget.exe ja pobrać z tego linku inaczej mam błądUnknown commmand: 'locals'
ajbeaven
1
pamiętaj, aby zamknąć VS, ponieważ devenv.exemoże blokować niektóre foldery pakietów i nie zostaną usunięte.
Sharif,
226

W Visual Studio 2017 przejdź do menu NarzędziaMenedżer pakietów NuGetUstawienia Menedżera pakietów . Możesz znaleźć przycisk Clear All NuGet Cache(s):

Wpisz opis zdjęcia tutaj

Jeśli używasz platformy .NET Core, możesz wyczyścić pamięć podręczną za pomocą tego polecenia, które powinno działać od wersji .NET Core narzędzi 1.0:

dotnet nuget locals all --clear
Ricky
źródło
7
Więc wrócił! :-). Jestem ciekawy, czy zostanie usunięty ponownie w VS 2019 :-)
g.pickardou
13
użycie wiersza poleceń dotnet nuget locals all --clearjest bardzo przydatne, dzięki
Boggin 21.04.17
1
Dowództwo dotnet nuget locals all --cleardziałało idealnie. Nie musiałem instalować żadnego dodatkowego narzędzia cmd dla nuget. Mój dysk SSD może znów oddychać!
Jiří Kuba
87

Narzędzie nuget.exe nie ma tej funkcji, ale ponieważ pamięć podręczna NuGet jest po prostu folderem na komputerze, możesz ręcznie usunąć pliki. Po prostu dodaj to do pliku wsadowego:

del %LOCALAPPDATA%\NuGet\Cache\*.nupkg /q
Kiliman
źródło
5
W momencie zadawania pytań było to jedyne rozwiązanie, więc była to najlepsza odpowiedź. Teraz odznaczyłem to i po wypróbowaniu udzieliłem odpowiedzi @ rmoore.
g.pickardou 20.04.2016
27

Dla mnie musiałem tu wejść:

%userprofile%\.nuget\packages
Bowofola
źródło
2
Jest to właściwa ścieżka, w której wszystkie samorodki są pobierane i przechowywane
Alok Rajasukumaran
2
I miałem pakiety
nuget
19
2.04GB to mniej więcej tyle samo, co node_modules dla aplikacji typu „hello world”;)
tommed
20

To dodaje do odpowiedzi rm8x .

Pobierz i zainstaluj narzędzie wiersza polecenia NuGet.

Wymień wszystkich naszych mieszkańców:

$ nuget locals all -list
http-cache: C:\Users\MyUser\AppData\Local\NuGet\v3-cache
packages-cache: C:\Users\MyUser\AppData\Local\NuGet\Cache
global-packages: C:\Users\MyUser\.nuget\packages\

Możemy je teraz usunąć ręcznie lub, jak sugeruje rm8x , użyj nuget locals all -clear.

Shaun Luttin
źródło
po co usuwać, jeśli nuget wygeneruje wszystkie z każdą kompilacją? dlaczego nuget tworzy tak wiele folderów?
batmaci,
2
@batmaci ponieważ z czasem pakiety aktualizowane i będziesz skończyć z Batmaci 1.0, Batmaci 1.1, Batmaci 1.2gdzie wszystko, czego potrzebujesz to najnowsza jeden
Simon_Weaver
Od czasu do czasu mieliśmy problem z naszym serwerem kompilacji, ponieważ nie mogliśmy znaleźć pakietów NuGet w pamięci podręcznej. Rozwiązaliśmy go, zawsze czyszcząc pamięć podręczną na początku kompilacji.
Steve Wright
14

Pamiętaj, że dnxma inną pamięć podręczną do dostarczania wyników HTTP:

Microsoft .NET Development Utility Clr-x86-1.0.0-rc1-16231
   CACHE https://www.nuget.org/api/v2/
   CACHE http://192.168.148.21/api/odata/

Które możesz wyczyścić

dnu clear-http-cache

Teraz musimy tylko dowiedzieć się, jakie będzie polecenie w nowym dotnetnarzędziu CLI.

... a oto:

dotnet restore --no-cache
KCD
źródło
Wybrałbym powyższe podejście od Ruslana, ponieważ mam pewne problemy z pakietami nawet przechodzącymi - no-cache
Alexz
Bieganie dotnet restore --no-cachedziałało dla mnie, ale musiałem to zrobić z monitu Powershell działającego jako administrator
shanabus
10

dotnet nuget locals all --clear

Jeśli korzystasz z .NET Core.

Jim Aho
źródło
Sugerowałbym zrobienie tego przed pójściem na lunch.
Helzgate
5

Jeśli chcesz wyczyścić pamięć podręczną NuGet dla serwera / agenta kompilacji, możesz znaleźć pamięć podręczną dla pakietów NuGet tutaj:

%windir%/ServiceProfiles/[account under build service runs]\AppData\Local\NuGet\Cache

Przykład:

C:\Windows\ServiceProfiles\NetworkService\AppData\Local\NuGet\Cache
Khablander
źródło
1
Pozwoliłem sobie zaznaczyć ścieżkę, aby była bardziej czytelna, i zastąpić [windows dir] %windir%, który automatycznie umieści cię w odpowiednim katalogu, gdy wejdziesz do np. Eksploratora Windows.
Kjartan
3

Możesz także użyć programu PowerShell (tak samo jak ja).

Na przykład:

rm $env:LOCALAPPDATA\NuGet\Cache\*.nupkg

Lub tryb „cichy” (bez komunikatów o błędach):

rm $env:LOCALAPPDATA\NuGet\Cache\*.nupkg 2> $null
honzakuzel1989
źródło