Управление папкой установки глобальных пакетов, кэшем и временными папкамиManaging the global packages, cache, and temp folders

После каждой установки, обновления или восстановления NuGet управляет пакетами и сведениями о них в нескольких папках за пределами структуры проекта:Whenever you install, update, or restore a package, NuGet manages packages and package information in several folders outside of your project structure:

nameName Описание и расположение (в зависимости от пользователя)Description and Location (per user)
global‑packagesglobal‑packages В папку global-packages NuGet устанавливает любой загруженный пакет.The global-packages folder is where NuGet installs any downloaded package. Каждый пакет полностью развертывается во вложенную папку, соответствующую идентификатору пакета и номеру версии.Each package is fully expanded into a subfolder that matches the package identifier and version number. Проекты в формате PackageReference всегда используют пакеты непосредственно из этой папки.Projects using the PackageReference format always use packages directly from this folder. При использовании packages.config пакеты устанавливаются в папку global-packages, а затем копируются папку проекта packages.When using the packages.config, packages are installed to the global-packages folder, then copied into the project's packages folder.
  • Windows: %userprofile%\.nuget\packagesWindows: %userprofile%\.nuget\packages
  • Mac/Linux: ~/.nuget/packagesMac/Linux: ~/.nuget/packages
  • Переопределяет с помощью переменной среды NUGET_PACKAGES параметры конфигурации globalPackagesFolder или repositoryPath (при использовании PackageReference и packages.config соответственно) или свойство MSBuild RestorePackagesPath (только MSBuild).Override using the NUGET_PACKAGES environment variable, the globalPackagesFolder or repositoryPath configuration settings (when using PackageReference and packages.config, respectively), or the RestorePackagesPath MSBuild property (MSBuild only). Переменная среды имеет приоритет над параметром конфигурации.The environment variable takes precedence over the configuration setting.
http‑cachehttp‑cache Диспетчер пакетов Visual Studio (NuGet 3.x +) и dotnet инструмент хранят копии загруженных пакетов в этом кеше (сохраненные как .dat файла), организованные в подпапки для каждого источника пакета.The Visual Studio Package Manager (NuGet 3.x+) and the dotnet tool store copies of downloaded packages in this cache (saved as .dat files), organized into subfolders for each package source. Пакеты не развернуты. Срок действия кэша составляет 30 минут.Packages are not expanded, and the cache has an expiration time of 30 minutes.
  • Windows: %localappdata%\NuGet\v3-cacheWindows: %localappdata%\NuGet\v3-cache
  • Mac/Linux: ~/.local/share/NuGet/v3-cacheMac/Linux: ~/.local/share/NuGet/v3-cache
  • Переопределяет с помощью переменной среды NUGET_HTTP_CACHE_PATH.Override using the NUGET_HTTP_CACHE_PATH environment variable.
temptemp Папка, в которой NuGet хранит временные файлы, используемые в различных операциях.A folder where NuGet stores temporary files during its various operations.
  • Windows: %temp%\NuGetScratchWindows: %temp%\NuGetScratch
  • Mac/Linux: /tmp/NuGetScratchMac/Linux: /tmp/NuGetScratch
  • plugins-cache 4.8+plugins-cache 4.8+ Папка, в которой NuGet хранит результаты запросов на утверждение операций.A folder where NuGet stores the results from the operation claims request.
    • Windows: %localappdata%\NuGet\plugins-cacheWindows: %localappdata%\NuGet\plugins-cache
    • Mac/Linux: ~/.local/share/NuGet/plugins-cacheMac/Linux: ~/.local/share/NuGet/plugins-cache
    • Переопределите с помощью переменной среды NUGET_PLUGINS_CACHE_PATH.Override using the NUGET_PLUGINS_CACHE_PATH environment variable.

    Примечание

    NuGet 3.5 и более ранних версий использует папку packages-cache вместо http-cache, которая находится по следующему пути: %localappdata%\NuGet\Cache.NuGet 3.5 and earlier uses packages-cache instead of the http-cache, which is located in %localappdata%\NuGet\Cache.

    Использование кэша и папок global-packages позволяет NuGet избежать скачивания пакетов, хранящихся на компьютере, что в свою очередь улучшает производительность операций установки, обновления и восстановления.By using the cache and global-packages folders, NuGet generally avoids downloading packages that already exist on the computer, improving the performance of install, update, and restore operations. При использовании формата PackageReference папка global-packages также позволяет избежать хранения скачанных пакетов в папках проектов, откуда их можно случайно добавить в систему управления версиями. Кроме того, это снижает общее влияние NuGet на ресурсы хранилища компьютера.When using PackageReference, the global-packages folder also avoids keeping downloaded packages inside project folders, where they might be inadvertently added to source control, and reduces NuGet's overall impact on computer storage.

    При запросе на извлечение пакета NuGet в первую очередь проверяет папку global-packages.When asked to retrieve a package, NuGet first looks in the global-packages folder. Если не удается найти точную версию пакета, NuGet проверяет все источники пакетов, отличные от HTTP.If the exact version of package is not there, then NuGet checks all non-HTTP package sources. Если пакет отсутствует и там, NuGet ищет его в папке http-cache, если вы не указали с помощью команды dotnet.exe параметр --no-cache или с помощью команды nuget.exe параметр -NoCache.If the package is still not found, NuGet looks for the package in the http-cache unless you specify --no-cache with dotnet.exe commands or -NoCache with nuget.exe commands. Если пакет отсутствует в кэше или кэш не используется, NuGet извлекает пакет по протоколу HTTP.If the package is not in the cache, or the cache isn't used, NuGet then retrieves the package over HTTP .

    Дополнительные сведения см. в разделе Процесс установки пакета.For more information, see What happens when a package is installed.

    Просмотр расположения папокViewing folder locations

    Расположение можно просмотреть с помощью команды nuget locals:You can view locations using the nuget locals command:

    # Display locals for all folders: global-packages, http cache, temp and plugins cache
    nuget locals all -list
    

    Типичные выходные данные выглядят следующим образом (Windows; user1 —это имя текущего пользователя):Typical output (Windows; "user1" is the current username):

    http-cache: C:\Users\user1\AppData\Local\NuGet\v3-cache
    global-packages: C:\Users\user1\.nuget\packages\
    temp: C:\Users\user1\AppData\Local\Temp\NuGetScratch
    plugins-cache: C:\Users\user1\AppData\Local\NuGet\plugins-cache
    

    (Папка package-cache используется в NuGet 2.x. Ее содержимое можно посмотреть с помощью NuGet 3.5 и более ранних версий.)(package-cache is used in NuGet 2.x and appears with NuGet 3.5 and earlier.)

    Расположения папок можно также просмотреть с помощью команды dotnet nuget locals:You can also view folder locations using the dotnet nuget locals command:

    dotnet nuget locals all --list
    

    Типичные выходные данные выглядят следующим образом (Mac/Linux; user1 —это имя текущего пользователя):Typical output (Mac/Linux; "user1" is the current username):

    info : http-cache: /home/user1/.local/share/NuGet/v3-cache
    info : global-packages: /home/user1/.nuget/packages/
    info : temp: /tmp/NuGetScratch
    info : plugins-cache: /home/user1/.local/share/NuGet/plugins-cache
    

    Чтобы отобразить расположение отдельной папки, используйте http-cache, global-packages, temp или plugins-cache, а не all.To display the location of a single folder, use http-cache, global-packages, temp, or plugins-cache instead of all.

    Очистка локальных папокClearing local folders

    Если при установке пакета возникают неполадки или вы по иной причине хотите обеспечить установку пакетов из удаленной коллекции, используйте параметр locals --clear (dotnet.exe) или locals -clear (nuget.exe), с помощью которых можно указать конкретную папку, которую нужно очистить, или параметр all, чтобы очистить все папки:If you encounter package installation problems or otherwise want to ensure that you're installing packages from a remote gallery, use the locals --clear option (dotnet.exe) or locals -clear (nuget.exe), specifying the folder to clear, or all to clear all folders:

    # Clear the 3.x+ cache (use either command)
    dotnet nuget locals http-cache --clear
    nuget locals http-cache -clear
    
    # Clear the 2.x cache (NuGet CLI 3.5 and earlier only)
    nuget locals packages-cache -clear
    
    # Clear the global packages folder (use either command)
    dotnet nuget locals global-packages --clear
    nuget locals global-packages -clear
    
    # Clear the temporary cache (use either command)
    dotnet nuget locals temp --clear
    nuget locals temp -clear
    
    # Clear the plugins cache (use either command)
    dotnet nuget locals plugins-cache --clear
    nuget locals plugins-cache -clear
    
    # Clear all caches (use either command)
    dotnet nuget locals all --clear
    nuget locals all -clear
    

    Все пакеты, которые в настоящее время открыты в проектах Visual Studio, нельзя удалить из папки global-packages.Any packages used by projects that are currently open in Visual Studio are not cleared from the global-packages folder.

    В Visual Studio 2017 в меню Инструменты > Диспетчер пакетов NuGet > Параметры диспетчера пакетов выберите Clear All NuGet Cache(s) (Очистить весь кэш NuGet).In Visual Studio 2017, use the Tools > NuGet Package Manager > Package Manager Settings menu command, then select Clear All NuGet Cache(s). Сейчас управлять кэшем через консоль диспетчера пакетов нельзя.Managing the cache isn't presently available through the Package Manager Console. В Visual Studio 2015 используйте вместо этого команды CLI.In Visual Studio 2015, use the CLI commands instead.

    Команды очистки кэша NuGet

    Ошибки и способы их устраненияTroubleshooting errors

    При использовании nuget locals или dotnet nuget locals могут возникать следующие ошибки:The following errors can occur when using nuget locals or dotnet nuget locals:

    • Ошибка: процесс не может получить доступ к файлу , поскольку этот файл используется другим процессом или При удалении локальных ресурсов произошел сбой: не удалось удалить один файл (или несколько)Error: The process cannot access the file because it is being used by another process or Clearing local resources failed: Unable to delete one or more files

      Один или несколько файлов в папке используются другим процессом, например открыт проект Visual Studio, который ссылается на пакеты в папке global-packages.One or more files in the folder are in use by another process; for example, a Visual Studio project is open that refers to packages in the global-packages folder. Закройте эти процессы и повторите попытку.Close those processes and try again.

    • Ошибка: доступ к пути "" запрещен или Каталог не пустError: Access to the path is denied or The directory is not empty

      Отсутствуют разрешения на удаление файлов в кэше.You don't have permission to delete files in the cache. Измените разрешения папки, если это возможно, и повторите попытку.Change the folder permissions, if possible, and try again. В противном случае обратитесь к системному администратору.Otherwise, contact your system administrator.

    • Ошибка: указанный путь, имя файла или оба значения имеют слишком большую длину. Полное имя файла должно содержать меньше 260 символов, а имя каталога — меньше 248 символовError: The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.

      Сократите имена папок и повторите попытку.Shorten the folder names and try again.