Как программно получить расположение папки кэша 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.Клиент