Как программно получить расположение папки кэша 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
тут:
- установить пакет nuget
NuGet.Configuration
в проекте - добавить
using NuGet.Configuration
в верхней части файла - использовать следующий код(который
nuget.exe
использует под капотом):
var settings = Settings.LoadDefaultSettings(null);
Console.WriteLine(SettingsUtility.GetGlobalPackagesFolder(settings));
вы также можете проверить nuget.exe с ILSpy
чтобы выяснить, как это работает или использовать соответствующий исходный код в github NuGet / NuGet.Клиент