private NuGet.Versioning.NuGetVersion BestLibraryVersion(string name, NuGet.Versioning.VersionRange range, IList <NuGet.ProjectModel.LockFileLibrary> libraries)
        {
            var versions  = libraries.Where(lib => lib.Name == name).Select(lib => lib.Version);
            var bestMatch = range.FindBestMatch(versions);

            if (bestMatch == null)
            {
                if (versions.Count() == 1)
                {
                    return(versions.First());
                }
                else
                {
                    Console.WriteLine($"WARNING: Unable to find a version to satisfy range {range.PrettyPrint()} for the dependency " + name);
                    if (range.HasUpperBound && !range.HasLowerBound)
                    {
                        Console.WriteLine($"Instead will return the maximum range demanded: " + range.MaxVersion.ToFullString());
                        return(range.MaxVersion);
                    }
                    else
                    {
                        Console.WriteLine($"Instead will return the minimum range demanded: " + range.MinVersion.ToFullString());
                        return(range.MinVersion);
                    }
                }
            }
            else
            {
                return(bestMatch);
            }
        }
        public string GetBestVersion(string name, NuGet.Versioning.VersionRange range)
        {
            var allVersions = versions.Keys.Where(key => key.Name == name).Select(key => versions[key]);

            var best = range.FindBestMatch(allVersions.Select(ver => ver.version));

            foreach (var pair in versions)
            {
                if (pair.Key.Name == name && pair.Value.version == best)
                {
                    return(pair.Key.Version);
                }
            }

            return(null);
        }