Как очистить кеш пакета NuGet с помощью командной строки?

405

Я могу очистить кэш пакетов моего компьютера разработки с помощью меню Visual Studio СервисПараметрыДиспетчер пакетов NuGetОбщие : Clear Package Cacheкнопка.

Я хотел бы сделать это в командной строке. К сожалению, я не могу найти соответствующий ключ командной строки для nuget.exe.

Я что-то пропустил?

g.pickardou
источник
10
эта опция отсутствует в моей версии 2015 VS
spankmaster79
1
да, это отсутствует. Поэтому я использую принятый ответ.
g.pickardou
1
Документ от
Simon_Weaver

Ответы:

634

Сначала загрузите инструмент командной строки NuGet отсюда .

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

Вы можете перечислить локальные кэши с помощью этой команды:

nuget locals all -list

Вы можете очистить все кеши с помощью этой команды:

nuget locals all -clear

Ссылка: https://docs.nuget.org/consume/command-line-reference

rm8x
источник
10
Работает хорошо для 3.3, но только для текущего пользователя - у меня была проблема с поврежденным локальным кешем на нашем сервере сборки, который (к сожалению) работал в локальной системе, поэтому кеш не был указан - фактическое местоположение было `C: \ Windows \ SysWOW64 \ config \ systemprofile \ AppData \ Local \ NuGet \ Cache`
- Бен Дюгид,
1
Возможно, вам следует запустить операцию очистки под тем же пользователем, что и операция сборки. Либо с настройкой выделенного пользователя для сборки, либо с помощью трюка для запуска очистки в локальной системе.
g.pickardou
2
Есть ли возможность удаления конкретного NuGet из кеша? Например: я хочу удалить NuGet X из кеша и не знаю, где находится кеш NuGet, в этой ситуации как удалить только «X» из кеша
user3610920
19
Мне пришлось запустить nuget update -selfобновление nuget.exe, которое я скачал по этой ссылке, в противном случае я получил ошибкуUnknown commmand: 'locals'
ajbeaven
1
убедитесь, что вы закрыли VS, поскольку он devenv.exeможет блокировать некоторые папки пакетов, и они не будут очищены.
Шариф
228

В Visual Studio 2017 откройте меню ИнструментыДиспетчер пакетов NuGetНастройки диспетчера пакетов . Вы можете найти кнопку Clear All NuGet Cache(s):

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

Если вы используете .NET Core, вы можете очистить кеш с помощью этой команды, которая должна работать с .NET Core tools 1.0:

dotnet nuget locals all --clear
Рики
источник
7
Итак, он вернулся! :-). Мне любопытно, будет ли он снова удален в VS 2019 :-)
g.pickardou
13
Использование командной строки dotnet nuget locals all --clearочень полезно, спасибо
Боггин
1
Команда dotnet nuget locals all --clearсработала отлично. Мне не нужно было устанавливать какой-либо дополнительный инструмент Nuget CMD. Мой SSD снова может дышать!
Иржи Куба
87

Утилита nuget.exe не имеет этой функции, но, увидев, что кэш NuGet - это просто папка на вашем компьютере, вы можете удалить файлы вручную. Просто добавьте это в ваш пакетный файл:

del %LOCALAPPDATA%\NuGet\Cache\*.nupkg /q
Kiliman
источник
5
На момент запроса это было единственное решение, поэтому был лучший ответ. Теперь я снял отметку и зачитал ответ @ rmoore после того, как попробовал.
g.pickardou
28

Для меня я должен был пойти сюда:

%userprofile%\.nuget\packages
Bowofola
источник
2
Это правильный путь, где все нюги загружаются и хранятся
Alok Rajasukumaran
2
И у меня было 2,04 Гб нюгет-пакетов: o
Alok Rajasukumaran
19
2.04GB - это примерно то же самое, что и node_modules для приложения узла "hello world";)
tommed
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
Строймеханизация
источник
Я бы пошел с подходом выше от Руслана, так как у меня есть некоторые проблемы с пакетами, даже передавая --no-cache
Alexz
Запуск dotnet restore --no-cacheработал для меня, но я должен был сделать это из приглашения Powershell, работающего от имени администратора
shanabus
10

dotnet nuget locals all --clear

Если вы используете .NET Core.

Джим Ахо
источник
Я бы предложил сделать это, прежде чем идти на обед.
Helzgate
5

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

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

Пример:

C:\Windows\ServiceProfiles\NetworkService\AppData\Local\NuGet\Cache
khablander
источник
1
Я взял на себя смелость пометить путь, чтобы сделать его более читабельным, и заменил [windows dir] на %windir%, который автоматически поместит вас в правильный каталог при входе, например, в Windows Explorer.
Кьяртан
3

Вы также можете использовать PowerShell (так же, как я).

Например:

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

Или «тихий» режим (без сообщений об ошибках):

rm $env:LOCALAPPDATA\NuGet\Cache\*.nupkg 2> $null
honzakuzel1989
источник