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