2017-07-26 63 views
15

Potrzebuję uzyskać z aplikacji .NET (to znaczy nie .NET Core app) listę katalogów, w których NuGet przechowuje swoje pakiety.Jak programowo uzyskać lokalizację folderu pamięci podręcznej nuget?

Domyślnie jest w C:\Users\[YourUsername]\.nuget\packages, więc opcja jest iteracyjne dla wszystkich użytkowników zakładając, że bieżący użytkownik systemu Windows, który uruchamia proces, ma prawo dostępu do danych innych użytkowników. Co więcej, jeśli ten domyślny katalog zostanie zmieniony przez użytkownika, utknąłem.

Odpowiedź jest here przez

nuget locals packages-cache -list 

ale to nie jest kod .NET i wydaje się być przestarzały opcja, zgodnie z odpowiedzią.


Ponadto chciałbym zrozumieć logikę NET Rdzeń Nuget pakietów miejsc, bo widzę jakieś pakiety .NET rdzenia w 3 miejscach:

  • C:\Program Files\dotnet\shared\Microsoft.NETCore.App (nie zawierają AspNetCore pakiety)
  • C:\Users\[UserName]\.nuget\packages (nie zawierają pakietów AspNetCore)
  • C:\Program Files (x86)\Microsoft SDKs\NuGetPackages (nie zawierają pakietów AspNetCore)

Odpowiedz

7

W tym celu trzeba użyć tego samego kodu i bibliotek jako nuget.exe robi:

  1. zainstalować pakiet Nuget NuGet.Configuration do projektu
  2. Dodaj using NuGet.Configuration na górze pliku
  3. Skorzystaj z po hasła (nuget.exe wykorzystuje się pod wyciągiem)
var settings = Settings.LoadDefaultSettings(null); 
Console.WriteLine(SettingsUtility.GetGlobalPackagesFolder(settings)); 

Można również sprawdzić nuget.exe z ILSpy aby dowiedzieć się, jak to działa, czy użyć odpowiedniego kodu źródłowego na github NuGet/NuGet.Client

+0

Nie będziemy mieć czas na przetestowanie tego teraz, ale to brzmi dobrze i będą pisać o moim doświadczeniu próbuje to. W międzyczasie sprawdzam to pytanie w odpowiedzi na pytania –