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

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

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

ответ предусмотренного здесь через

nuget locals packages-cache -list

но это не .NET-код и, похоже, устаревший вариант в соответствии с ответом.


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

  • C:Program FilesdotnetsharedMicrosoft.NETCore.App (не содержат пакетов AspNetCore)
  • C:Users[UserName].nugetpackages (содержат пакеты AspNetCore)
  • C:Program Files (x86)Microsoft SDKsNuGetPackages (содержат пакеты AspNetCore)

1 ответов


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

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

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