Как программно получить местоположение папки кэша nuget

Мне нужно получить из приложения .NET(это не приложение .NET Core) список каталогов, в которых NuGet хранит свои пакеты.

Я знаю, что по умолчанию он находится в C:\Users\[YourUsername]\.nuget\packages, поэтому опция состоит в том, чтобы перебирать всех пользователей, предполагая, что текущий пользователь Windows, который запускает процесс, имеет право доступа к другим данным пользователей. Более того, если этот параметр по умолчанию изменен пользователем, я застрял.

Ответ предоставляется здесь через

nuget locals packages-cache -list

но это не код .NET, и он, кажется, является устаревшим вариантом в соответствии с ответом.


Кроме того, я хотел бы понять логику расположения пакетов .NET Core NuGet, потому что я вижу некоторые пакеты .NET Core в трех местах:

  • C:\Program Files\dotnet\shared\Microsoft.NETCore.App (не содержат пакеты AspNetCore)
  • C:\Users\[UserName]\.nuget\packages (содержать пакеты AspNetCore)
  • C:\Program Files (x86)\Microsoft SDKs\NuGetPackages (содержат пакеты AspNetCore)

Ответы

Ответ 1

Для этого вам нужно использовать тот же код и библиотеки, что и nuget.exe:

  • Установите пакет nuget NuGet.Configuration в ваш проект
  • Добавьте using NuGet.Configuration в начало файла
  • Используйте следующий код (который nuget.exe сам использует под капотом):
var settings = Settings.LoadDefaultSettings(null);
Console.WriteLine(SettingsUtility.GetGlobalPackagesFolder(settings));

Вы также можете проверить nuget.exe на ILSpy, чтобы выяснить, как он работает или использовать соответствующий исходный код в github NuGet/NuGet.Client