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, чтобы управлять кэшами без боли.

Комментариев нет


Добавить комментарий