in src/NuGet.Core/NuGet.CommandLine.XPlat/ListPackage/ListPackageConsoleRenderer.cs [93:200]
private static void WriteProjects(TextWriter consoleOut, TextWriter consoleError, List<ListPackageProjectModel> projects, ListPackageArgs listPackageArgs)
{
foreach (ListPackageProjectModel project in projects)
{
PrintProblems(consoleOut, consoleError, project.ProjectProblems, listPackageArgs);
if (project.ProjectProblems?.Any(p => p.ProblemType == ProblemType.Error) == true)
{
return;
}
if (project.TargetFrameworkPackages == null)
{
consoleOut.WriteLine(string.Format(CultureInfo.CurrentCulture, Strings.ListPkg_NoPackagesFoundForFrameworks, project.ProjectName));
continue;
}
bool printPackages = project.TargetFrameworkPackages.Any(p => p.TopLevelPackages?.Any() == true ||
listPackageArgs.IncludeTransitive && p.TransitivePackages?.Any() == true);
// Filter packages for dedicated reports, inform user if none
if (listPackageArgs.ReportType != ReportType.Default && !printPackages)
{
switch (listPackageArgs.ReportType)
{
case ReportType.Outdated:
consoleOut.WriteLine(string.Format(CultureInfo.CurrentCulture, Strings.ListPkg_NoUpdatesForProject, project.ProjectName));
break;
case ReportType.Deprecated:
consoleOut.WriteLine(string.Format(CultureInfo.CurrentCulture, Strings.ListPkg_NoDeprecatedPackagesForProject, project.ProjectName));
break;
case ReportType.Vulnerable:
consoleOut.WriteLine(string.Format(CultureInfo.CurrentCulture, Strings.ListPkg_NoVulnerablePackagesForProject, project.ProjectName));
break;
}
}
printPackages = printPackages || ReportType.Default == listPackageArgs.ReportType;
if (!printPackages)
{
continue;
}
consoleOut.WriteLine(GetProjectHeader(project.ProjectName, listPackageArgs));
foreach (ListPackageReportFrameworkPackage frameworkPackages in project.TargetFrameworkPackages)
{
List<ListReportPackage> frameworkTopLevelPackages = frameworkPackages.TopLevelPackages;
List<ListReportPackage> frameworkTransitivePackages = frameworkPackages.TransitivePackages;
// If no packages exist for this framework, print the
// appropriate message
if (frameworkTopLevelPackages?.Any() != true && frameworkTransitivePackages?.Any() != true)
{
Console.ForegroundColor = ConsoleColor.Blue;
switch (listPackageArgs.ReportType)
{
case ReportType.Outdated:
consoleOut.WriteLine(string.Format(CultureInfo.CurrentCulture, " [{0}]: " + Strings.ListPkg_NoUpdatesForFramework, frameworkPackages.Framework));
break;
case ReportType.Deprecated:
consoleOut.WriteLine(string.Format(CultureInfo.CurrentCulture, " [{0}]: " + Strings.ListPkg_NoDeprecationsForFramework, frameworkPackages.Framework));
break;
case ReportType.Vulnerable:
consoleOut.WriteLine(string.Format(CultureInfo.CurrentCulture, " [{0}]: " + Strings.ListPkg_NoVulnerabilitiesForFramework, frameworkPackages.Framework));
break;
case ReportType.Default:
consoleOut.WriteLine(string.Format(CultureInfo.CurrentCulture, " [{0}]: " + Strings.ListPkg_NoPackagesForFramework, frameworkPackages.Framework));
break;
}
Console.ResetColor();
}
else
{
// Print name of the framework
Console.ForegroundColor = ConsoleColor.Blue;
consoleOut.WriteLine(string.Format(CultureInfo.CurrentCulture, " [{0}]: ", frameworkPackages.Framework));
Console.ResetColor();
// Print top-level packages
if (frameworkTopLevelPackages?.Any() == true)
{
var tableHasAutoReference = false;
var tableToPrint = ProjectPackagesPrintUtility.BuildPackagesTable(
frameworkTopLevelPackages, printingTransitive: false, listPackageArgs, ref tableHasAutoReference);
if (tableToPrint != null)
{
ProjectPackagesPrintUtility.PrintPackagesTable(tableToPrint);
}
}
// Print transitive packages
if (listPackageArgs.IncludeTransitive && frameworkTransitivePackages?.Any() == true)
{
var tableHasAutoReference = false;
var tableToPrint = ProjectPackagesPrintUtility.BuildPackagesTable(
frameworkTransitivePackages, printingTransitive: true, listPackageArgs, ref tableHasAutoReference);
if (tableToPrint != null)
{
ProjectPackagesPrintUtility.PrintPackagesTable(tableToPrint);
}
}
}
}
}
}