Як я можу очистити кеш-пакет NuGet за допомогою командного рядка?


404

Я можу очистити кеш пакетів NuGet мого розвитку комп'ютера з допомогою Visual Menu Studio ToolsOptionsNuGet Package ManagerГенеральний : Clear Package Cacheкнопка.

Я хотів би зробити це в командному рядку. На жаль, я не можу знайти відповідний перемикач командного рядка для nuget.exe.

Я щось пропустив?


10
цей варіант відсутній у моїй версії VS 2015
spankmaster79

1
так, його немає. Тому я використовую прийняту відповідь.
g.pickardou

Відповіді:


633

Спочатку завантажте інструмент командного рядка NuGet звідси .

Далі відкрийте командний рядок та cdдо каталогу, до якого nuget.exeбуло завантажено.

Ви можете перерахувати локальні кеші за допомогою цієї команди:

nuget locals all -list

Ви можете очистити всі кеші за допомогою цієї команди:

nuget locals all -clear

Довідка: https://docs.nuget.org/consume/command-line-reference


10
Добре працює для 3.3, але лише для поточного користувача - у мене виникла проблема з пошкодженим локальним кешем на нашому сервері збирання, який (на жаль) працює в локальній системі, тому кеш не був вказаний у списку - фактичне місце розташування було `C: \ Windows \ SysWOW64 \ config \ systemprofile \ AppData \ Local \ NuGet \ Cache`
Zhaph - Ben Duguid

1
Можливо, вам слід запустити чітку операцію у того самого користувача, що і операція збірки. Або з налаштуванням виділеного користувача побудови, або з використанням трюку, щоб запустити очищення в локальній системі.
g.pickardou

2
Чи є якісь можливості видалити конкретний NuGet з кешу? наприклад: Я хочу видалити NuGet X з кешу, і мені невідомо про розташування кешу NuGet. У цій ситуації як видалити "X" самостійно з кешу
user3610920

19
Мені довелося бігти, nuget update -selfщоб оновити nuget.exe, який я завантажив із цього посилання, інакше я отримав помилкуUnknown commmand: 'locals'
ajbeaven

1
переконайтеся, що ви закрили свій VS, оскільки він devenv.exeможе блокувати деякі папки пакунків, і вони не будуть очищені.
Шаріф

226

У Visual Studio 2017 перейдіть до меню ІнструментиNuGet Package ManagerНастройки диспетчера пакунків . Ви можете дізнатися кнопку Clear All NuGet Cache(s):

Введіть тут опис зображення

Якщо ви використовуєте .NET Core, ви можете очистити кеш за допомогою цієї команди, яка повинна працювати як інструменти .NET Core 1.0:

dotnet nuget locals all --clear

7
Так що повернувся! :-). Мені цікаво, чи його знову видалять у VS 2019 :-)
g.pickardou

13
Використання командного рядка dotnet nuget locals all --clearдуже корисно, дякую
Boggin

1
Командування dotnet nuget locals all --clearпрацювало чудово. Мені не довелося встановлювати жодних додаткових інструментів cmd. Мій SSD може знову дихати!
Іржі Куба

87

Утиліта nuget.exe не має цієї функції, але побачивши, що кеш NuGet - це просто папка на вашому комп'ютері, ви можете видалити файли вручну. Просто додайте це до свого пакетного файлу:

del %LOCALAPPDATA%\NuGet\Cache\*.nupkg /q

5
На момент запитання це було єдиним рішенням, тому була найкраща відповідь. Тепер я знімав його з позначки і зараховував відповідь @ rmoore після її випробування.
g.pickardou

27

Для мене мені довелося зайти сюди:

%userprofile%\.nuget\packages

2
Це правильний шлях, куди завантажуються та зберігаються всі нутетки
Alok Rajasukumaran

2
І, у мене було 2,04 Гбіт нукет пакетів: o
Alok Rajasukumaran

19
2,04 Гб - це приблизно те саме, що node_modules для програми вузла "привіт світ";)
приурочено

20

Це додає до відповіді rm8x .

Завантажте та встановіть інструмент командного рядка NuGet.

Список усіх наших місцевих жителів:

$ 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\

Тепер ми можемо видалити їх вручну або, як пропонує rm8x , використовувати nuget locals all -clear.


який сенс видалити, якщо nuget згенерує всіх, хто має кожну збірку? Чому nuget створює стільки папок?
batmaci

2
@batmaci тому , що з плином часу пакети оновлюються , і ви будете в кінцевому підсумку з Batmaci 1.0, Batmaci 1.1, Batmaci 1.2де все , що вам потрібно , це остання з
Simon_Weaver

У нас виникали випадкові проблеми на нашому сервері збирання з тим, щоб не знайти пакети NuGet в кеші. Ми вирішили це, очищаючи кеш-пам'ять на початку збірки.
Стів Райт

14

Зауважте, що dnxдля керування результатами 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/

Яке ви можете очистити

dnu clear-http-cache

Тепер нам просто потрібно з'ясувати, яка команда буде в новому dotnetінструменті CLI.

... і ось це:

dotnet restore --no-cache

Я б пішов із підходом вище від Руслана, оскільки у мене є проблеми з пакетами, навіть проходячи
--nocheche

Біг dotnet restore --no-cacheпрацював для мене, але мені довелося це зробити з підказки Powershell, що працює адміністратором
shanabus


5

Якщо вам потрібно очистити кеш NuGet для вашого сервера / агента збирання, ви можете знайти кеш пакетів NuGet тут:

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

Приклад:

C:\Windows\ServiceProfiles\NetworkService\AppData\Local\NuGet\Cache

1
Я взяв на себе сміливість позначити шлях, щоб зробити його більш читабельним, і замінивши [windows dir] на %windir%, що автоматично введе вас у потрібний каталог при введенні, наприклад, Windows Explorer.
Кьяртан

3

Ви також можете використовувати PowerShell (те саме, що і я).

Наприклад:

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

Або "тихий" режим (без повідомлень про помилки):

rm $env:LOCALAPPDATA\NuGet\Cache\*.nupkg 2> $null
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.