2015-10-09 12 views
5

packages.configファイルに記載されているパッケージを(理想的にはC#経由で)読むにはどうすればよいですか?NuGetパッケージのリストをプログラム的に読み取るには?

私たちのソースコードリポジトリには、たくさんのソリューションとプロジェクトがあり、同様にたくさんのpackages.configファイルがあります。私はソースコードリポジトリ全体で使用されているパッケージ(とバージョン)の統合リストを構築しようとしています。

利用可能なNuGet.Coreパッケージがあります。これを使用して目標を達成するにはどうすればよいですか?

おかげ

+0

XMLですので、XMLReaderがジョブを実行する必要があります。 –

+0

これらは単なるXMLファイルです。あなたは 'System.Xml'ネームスペースを使って読みやすく解釈することができます –

+0

NuGetはオープンソースなので、なぜコードを再利用しないのですか? –

答えて

7

あなたはXMLを読みたくない場合は、直接あなたがNuGet.Core NuGetパッケージをインストールしてPackageReferenceクラスを使用することができます。

このクラスを使用してパッケージIDとそのバージョンを出力するコードの例を次に示します。

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); 
} 

あなたはおそらく、ディレクトリ検索を行うことができますpackages.configを自分でファイルを見つける必要があるでしょう、何かのように:

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

まさに私が探していたものです。ありがとうございました。 –

0

ように提案しますが、NuGet.Coreをインストールする必要がありますあなたのソリューションには複数のプロジェクトが含まれることがあるので、インストール時にプロジェクト名を指定する方法を知っておくとよいでしょう。ソリューションがMySolutionで、2つのプロジェクトがあるとします。Project01 & Project02Project02にインストールするだけです。あなたがパッケージをターゲットとあなたはちょうどあなたがそれを印刷できるようにバージョン番号を取得したいとしましょうし、あなたの仕事をしようとしているwhatever.csページにusingステートメントを追加する必要があります

Install-Package NuGet.Core -ProjectName Project02

次あなたのウェブサイトのどこかでそれは実際に私がやりたかったことです。私たちは、私のソフトウェアをリリースするとき、私は私のウェブサイト上の特定の場所で視覚的な識別子を持っていることを私は行くと見ることができるように、私は特定のパッケージで取得し、それを読みたいと思った

using NuGet;

次のバージョン番号です生産中のバージョン。

ここに私のページにwebformsラベルを設定するために書いたコードです。

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(); 
    } 

これは質問へのわずかに異なる答えですが、これは、私はこの質問/回答を見つけ、私は自分のニーズに合わせて学んだことを変更した後、私のニーズのためになってしまった解決策を示しています。私はそれが誰かを助けることができることを願っています

関連する問題