2015-10-09 10 views
5

Jaki jest najlepszy sposób odczytu (najlepiej za pośrednictwem C#) pakietów wymienionych w pliku packages.config?Jak programowo odczytać listę pakietów NuGet w packages.config?

W naszym repozytorium kodu źródłowego mam wiele rozwiązań i projektów oraz równie dużo plików packages.config. Próbuję utworzyć skonsolidowaną listę pakietów (i wersji) w użyciu w moim repozytorium kodu źródłowego.

Widzę, że dostępny jest pakiet NuGet.Core - w jaki sposób mogę go wykorzystać, aby osiągnąć mój cel?

Dzięki

+0

To XML, więc XMLReader powinien wykonać zadanie –

+0

Są to tylko pliki XML. Byłbyś w stanie z łatwością odczytać i zinterpretować je za pomocą przestrzeni nazw 'System.Xml'. –

+0

NuGet jest open source, więc dlaczego nie użyć kodu? –

Odpowiedz

7

Jeśli nie chcesz czytać XML bezpośrednio można zainstalować pakiet NuGet.Core Nuget a następnie użyć klasy PackageReference.

Oto przykładowy kod, który używa tej klasy do wydrukowania identyfikatora pakietu i jego wersji.

string fileName = @"c:\full\path\to\packages.config"; 

var file = new PackageReferenceFile(fileName); 
foreach (PackageReference packageReference in file.GetPackageReferences()) 
{ 
    Console.WriteLine("Id={0}, Version={1}", packageReference.Id, packageReference.Version); 
} 

Trzeba będzie znaleźć packages.config plików pod którym prawdopodobnie można zrobić z wyszukiwania katalogów, coś jak:

foreach (string fileName in Directory.EnumerateFiles("d:\root\path", "packages.config", SearchOption.AllDirectories)) 
{ 
    // Read the packages.config file... 
} 
+0

Dokładnie tego, czego szukałem - dziękuję. –

0

Jak sugeruje trzeba będzie zainstalować NuGet.Core, twój rozwiązanie może zawierać kilka projektów, więc dobrze wiedzieć, jak określić nazwę projektu podczas instalacji. Załóżmy, że Twoje rozwiązanie to MySolution i masz dwa projekty: a chcesz tylko zainstalować w Project02.

Install-Package NuGet.Core -ProjectName Project02

Następnie trzeba będzie dodać za pomocą komunikatu na stronie whatever.cs masz zamiar zrobić swoją pracę kierować pakiet i powiedzmy po prostu chcesz dostać numer wersji, dzięki czemu można je wydrukować gdzieś w twojej witrynie. Właśnie to chciałem zrobić.

using NuGet;

obok chciałem dostać w określonym opakowaniu i przeczytać to numer wersji, tak że gdy wydamy moje oprogramowanie mam wizualny identyfikator w określonym miejscu na mojej stronie internetowej, że mogę iść do i zobaczyć wersja, która jest w produkcji.

Oto kod, który napisałem, aby zapełnić etykietę webforms na mojej stronie.

protected void Page_Load(Object sender, EventArgs e) 
    { 
     var pkgRefpath = Server.MapPath("~/packages.config"); 

     PackageReferenceFile nugetPkgConfig = new PackageReferenceFile(pkgRefpath); 
     IEnumerable<PackageReference> allPackages = nugetPkgConfig.GetPackageReferences(); 

     var newtonsoftPkg = (
      from pkg in allPackages 
      where pkg.Id == "Newtonsoft.Json" 
      select pkg 
     ).FirstOrDefault(); 

     if (newtonsoftPkg== null) return; 
      var newtonsoftPkg_Version = newtonsoftPkg.Version; 

     ltrNewtonsoftVer.Text = newtonsoftPkg_Version.ToString(); 
    } 

Jest to nieco inna odpowiedź na pytanie, ale to pokazuje rozwiązanie, które skończyło się dla moich potrzeb po znalezieniu to Pytanie/odpowiedź i modyfikacji, co nauczyłem się dostosować swoje własne potrzeby. Mam nadzieję, że może pomóc komuś innemu.

Powiązane problemy