public int ConsolidateTransitiveDependencies(bool checkOnly)
        {
            RestoreSolution();

            ColorConsole.WriteInfo($"Generate dependency graph for {m_options.SolutionFile} please wait....");
            var graphSpec       = m_dependencyGraphReader.GenerateDependencyGraph(m_options.SolutionFile, m_options.MsBuildPath);
            var graph           = m_dependencyGraphAnalyzer.AnalyzeDependencyGraph(graphSpec);
            var requiredUpdates = graph.IdentifyRequiredNugetUpdates(m_options.Verbose).ToList();
            int result          = 0;    // success

            if (requiredUpdates.Any())
            {
                if (checkOnly)
                {
                    var packages = requiredUpdates.GroupBy(x => x.Library.Name).ToList();
                    ColorConsole.WriteWarning($"{packages.Count} packages are referenced with different versions:");
                    foreach (var package in packages)
                    {
                        var firstOccurrence = package.First();
                        ColorConsole.WriteWarning($"Upgrade of {firstOccurrence.Library.Name} to version {firstOccurrence.TargetVersion} required in {package.Count()} projects");
                    }
                    ColorConsole.WriteWarning("run this command again with the fix option to fix this");
                    result = requiredUpdates.Count;
                }
                else
                {
                    UpdatePackageReferences(requiredUpdates);
                }
            }
            else
            {
                ColorConsole.WriteInfo("all packages are referenced with the same version");
            }
            return(result);            // success
        }