public static bool TryGetPackageByName(this INuGetReferences references, string packageName, [MaybeNullWhen(false)] out NuGetReference nugetReference)
        {
            if (references is null)
            {
                throw new ArgumentNullException(nameof(references));
            }

            var matches = references.PackageReferences.Where(p => p.Name.Equals(packageName, StringComparison.OrdinalIgnoreCase)).OrderByDescending(p => Version.Parse(p.Version));

            nugetReference = matches.FirstOrDefault();
            return(nugetReference is not null);
        }
        public DependencyAnalysisState(IProject project, INuGetReferences nugetReferences, IReadOnlyCollection <TargetFrameworkMoniker> targetFrameworks)
        {
            if (project is null)
            {
                throw new ArgumentNullException(nameof(project));
            }

            if (nugetReferences is null)
            {
                throw new ArgumentNullException(nameof(nugetReferences));
            }

            FrameworkReferences = new DependencyCollection <Reference>(initial: project.FrameworkReferences, setRisk: SetRisk);
            Packages            = new DependencyCollection <NuGetReference>(initial: nugetReferences.PackageReferences, setRisk: SetRisk);
            References          = new DependencyCollection <Reference>(project.References, SetRisk);
            IsValid             = true;
            TargetFrameworks    = targetFrameworks;
            void SetRisk(BuildBreakRisk risk)
            {
                Risk = (BuildBreakRisk)Math.Max((int)Risk, (int)risk);
            }
        }