public async Task Run(NugetOptions no) { if (string.IsNullOrWhiteSpace(no.RootPath)) { no.RootPath = Directory.GetCurrentDirectory(); } if (!Directory.Exists(no.RootPath)) { ConsoleEx.WriteErrorLine($"Path {no.RootPath} not exists"); return; } var sm = new SolutionManager(null); var projects = new List <ProjectDetails>(); await foreach (var solution in sm.FindSolutions(no.RootPath)) { projects.AddRange(await sm.ReadSolution(solution)); } var nugets = projects.Distinct().SelectMany(p => p.Nugets.Select(n => new { Name = n.Name, Version = n.Version, Project = p.Name })); if (no.IgnoreSystemNugets) { nugets = nugets.Where(x => !x.Name.IsSystemNuget()); } var grouped = nugets.GroupBy(n => n.Name).OrderBy(n => n.Key).Select(nuget => new NugetGroup { Min = nuget.Min(n => n.Version), Max = nuget.Max(n => n.Version), Count = nuget.Count(), Name = nuget.Key }); if (no.OnlyDiff) { grouped = grouped.Where(x => x.Min != x.Max); } var headerThickness = new LineThickness(LineWidth.Double, LineWidth.Single); var doc = new Document(new Span("Nugets:") { Color = Yellow }, "\n", new Grid { Color = Gray, Columns = { GridLength.Star(1), GridLength.Auto, GridLength.Auto, GridLength.Auto }, Children = { new Cell("Name") { Stroke = headerThickness }, new Cell("Min") { Stroke = headerThickness }, new Cell("Max") { Stroke = headerThickness }, new Cell("Count") { Stroke = headerThickness }, grouped.Select(item => new[] { new Cell(item.Name) { Color = ColumnColor(item) }, new Cell(item.Min) { Color = ColumnColor(item) }, new Cell(item.Max) { Color = ColumnColor(item) }, new Cell(item.Count) { Color = ColumnColor(item) }, }) } } ); ConsoleRenderer.RenderDocument(doc); }