2017-02-21 7 views
0

を収集するためのツールを構築しますはC#これは私が欲しい情報のすべての部分である私が使用しnugetパッケージに</p> <p>を情報を収集する小さなC#のプログラムを構築していたプロジェクトNuget情報

public partial class MainWindow : Window 
{ 
    public Dictionary<string, Package> Packages; 
    public string Folder; 
    public SaveFileDialog saveFileDialog = new SaveFileDialog(); 
    public FolderBrowserDialog folderBrowseDialog = new FolderBrowserDialog(); 
    public MainWindow() 
    { 
     InitializeComponent(); 
     Packages = new Dictionary<string, Package>(); 
    } 

    private void SearchBtn_Click(object sender, RoutedEventArgs e) 
    { 
     DialogResult result = folderBrowseDialog.ShowDialog(); 
     if (result == System.Windows.Forms.DialogResult.OK) 
     { 
      DoneLbl.Content = "Started"; 
      Folder = folderBrowseDialog.SelectedPath; 
      foreach (string fileName in Directory.EnumerateFiles(Folder, "packages.config", SearchOption.AllDirectories)) 
      { 
       var file = new PackageReferenceFile(fileName); 
       foreach (PackageReference packageReference in file.GetPackageReferences()) 
       { 
        if (Packages.ContainsKey(packageReference.Id)) 
        { 
         Packages[packageReference.Id].Count++; 
         if (Packages[packageReference.Id].Versions.Contains(packageReference.Version.ToString())) 
         { 

         } 
         else 
         { 
          var oldVersion = new Version(Packages[packageReference.Id].Version); 
          var newVersion = new Version(packageReference.Version.ToString()); 
          if (newVersion > oldVersion) 
          { 
           Packages[packageReference.Id].Version = packageReference.Version.ToString(); 
          } 
          Packages[packageReference.Id].Versions.Add(packageReference.Version.ToString()); 
         } 
        } 
        else 
        { 
         var package = new Package(); 
         package.Name = packageReference.Id; 
         package.Count = 1; 
         package.Version = packageReference.Version.ToString(); 
         package.Versions = new List<string>(); 
         package.Versions.Add(packageReference.Version.ToString()); 
         Packages.Add(packageReference.Id, package); 
        } 
       } 
       DoneLbl.Content = "Done"; 
      } 
     } 
    } 

    private void ExportBtn_Click(object sender, RoutedEventArgs e) 
    { 
     saveFileDialog.Filter = "Text File | *.txt"; 
     DialogResult result = saveFileDialog.ShowDialog(); 

     if (result == System.Windows.Forms.DialogResult.OK) 
     { 
      string lines = "Nuget Packages for \r\n" + Folder + "\r\n"; 

      foreach (var Package in Packages) 
      { 
       lines += "********************\r\n"; 
       lines += "Name: " + Package.Value.Name + "\r\n"; 
       lines += "Version: " + Package.Value.Version + "\r\n"; 
       lines += "Different Versions: " + Package.Value.Versions.Count + "\r\n"; 
       lines += "Description: " + Package.Value.Description + "\r\n"; 
       lines += "Count: " + Package.Value.Count + "\r\n"; 
      } 

      StreamWriter file = new StreamWriter(saveFileDialog.FileName); 
      file.WriteLine(lines); 

      file.Close(); 
     } 
    } 
} 

"Nuget.Core" Nugetパッケージですべてを取得します。 しかし、私はまだ説明が不足しています。このナゲットパッケージを通してパッケージの説明を見つける方法はありますか?または、パッケージの説明を見つけるために使用できる他の方法はありますか?ここで説明するように

答えて

0

私はNuget V3パッケージに見えた: https://docs.microsoft.com/en-us/nuget/api/nuget-api-v3

これを使用して、私はのgetDescriptionメソッド

public async void GetDescription(string name, Package package) 
{ 
    List<Lazy<INuGetResourceProvider>> providers = new List<Lazy<INuGetResourceProvider>>(); 
    providers.AddRange(Repository.Provider.GetCoreV3()); // Add v3 API support 
    PackageSource packageSource = new PackageSource("https://api.nuget.org/v3/index.json"); 
    SourceRepository sourceRepository = new SourceRepository(packageSource, providers); 
    PackageMetadataResource packageMetadataResource = await sourceRepository.GetResourceAsync<PackageMetadataResource>(); 
    IEnumerable<IPackageSearchMetadata> searchMetadata = await packageMetadataResource.GetMetadataAsync(name, true, true, new Logger(), CancellationToken.None); 
    package.Description = searchMetadata.First().Description; 
} 

を作り、リストに新しいパッケージを追加するコードでそれを呼びました。

   { 
        var package = new Package(); 
        package.Name = packageReference.Id; 
        package.Count = 1; 
        GetDescription(packageReference.Id, package); 
        package.Version = packageReference.Version.ToString(); 
        package.Versions = new List<string>(); 
        package.Versions.Add(packageReference.Version.ToString()); 
        Packages.Add(packageReference.Id, package); 
       } 

私は後ですべてのトラフのNuget V3を取得しようとしますが、今はすべてが正常に動作します。

関連する問題