NuGet: как правильно очистить кэш
Как и любой другой пакетный менеджер, NuGet время от времени нуждается в чистке кэша. Поврежденные или устаревшие пакеты, проблемы с зависимостями, нестабильное интернет-соединение — всё это может привести к тому, что кэш будет содержать некорректные или неполные данные. В результате — ошибки сборки, невозможность обновить пакет, сбои при восстановлении зависимостей.
Раньше очистка кэша могла быть настоящим квестом: NuGet использовал разные директории на разных версиях Windows, Linux и macOS. Сегодня ситуация стала гораздо лучше: Microsoft собрала в одном месте документацию по всем типам кэшей и их расположению на разных операционных системах.
Виды кэша в NuGet
NuGet использует несколько типов кэшей:
-
http-cache — кэш HTTP-ответов от NuGet-серверов;
-
global-packages — глобальное хранилище скачанных пакетов;
-
temp — временные файлы, используемые при установке или сборке;
-
plugins-cache, http-request-cache, и др. — внутренние механизмы кэширования, используемые различными компонентами NuGet.
Просмотр текущих путей кэша
Прежде чем очищать кэш, иногда полезно узнать, где именно он расположен на вашей машине. Это можно сделать с помощью команды:
dotnet nuget locals all --list
Вы получите список всех используемых NuGet-кэшей и их путь на текущей системе.
Очистка всех кэшей
Самый простой способ удалить весь кэш — использовать встроенную в .NET CLI команду:
dotnet nuget locals all --clear
Эта команда удаляет все типы кэшей: http-cache, global-packages, temp, и т. д.
Если вы по какой-то причине используете старую NuGet CLI (отдельно от dotnet), команда выглядит так:
nuget locals all -clear
Совет: команды locals работают быстро и не требуют удаления файлов вручную в проводнике или терминале. Это гораздо безопаснее и надёжнее, чем вручную ковыряться в папках.
Очистка только HTTP-кэша
Наиболее частая проблема при разработке — «битый» HTTP-кэш, особенно когда сервер NuGet меняет содержимое пакета, не меняя его версию (что, хоть и не рекомендуется, но иногда случается).
Вариант 1: через CLI
dotnet nuget locals http-cache --clear
или:
nuget locals http-cache -clear
Вариант 2: вручную
На Windows вы можете вручную удалить папку HTTP-кэша:
%localappdata%\NuGet\v3-cache
На macOS и Linux путь будет другим, его можно узнать через команду --list, как показано выше.
Когда стоит очищать кэш?
-
При возникновении ошибок
Unable to load the service index for source... -
После обновления пакета на сервере без изменения версии
-
При непонятных сбоях восстановления пакетов
-
Перед сборкой «с нуля» на CI/CD
Заключение
Очистка NuGet-кэша — полезная практика, которая может сэкономить часы отладки. К счастью, современные инструменты .NET делают этот процесс простым и безопасным. Используйте команду dotnet nuget locals, чтобы управлять кэшами без боли.
Наиболее обсуждаемые: