2017-02-21 37 views
0

Я строй небольшой C# программы для сбора информации о используемых NuGet пакетахC# строит инструмент для сбора проекта NuGet информации

Это каждый кусок информации я хочу:

public class Package 
{ 
    public string Version { get; set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public int Count { get; set; } 
    public List<string> Versions { get; set; } 
    } 

И это как я собираю всю информацию:

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. Но мне все еще не хватает описания. Есть ли способ найти описание пакета через этот пакет 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, но сейчас все работает как надо.

 Смежные вопросы

  • Нет связанных вопросов^_^