C#构建一个工具来收集项目Nuget信息

时间:2017-02-21 12:31:58

标签: c# nuget nuget-package

我正在构建一个小型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();
        }
    }
}

这可以通过&#34; Nuget.Core&#34; nuget包。 但我仍然缺乏描述。有没有办法通过这个nuget包找到包描述?或者我可以用来查找包装描述的任何其他方式?

1 个答案:

答案 0 :(得分: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获得所有东西但是现在一切正常。