Esempio n. 1
0
        /// <summary>
        /// Remove duplicates found in the equivalence mappings.
        /// </summary>
        public IEnumerable <NuGetFramework> Reduce(IEnumerable <NuGetFramework> frameworks)
        {
            // order first so we get consistent results for equivalent frameworks
            var input = frameworks.OrderBy(f => f.DotNetFrameworkName, StringComparer.OrdinalIgnoreCase).ToArray();

            var comparer = new NuGetFrameworkFullComparer();

            for (var i = 0; i < input.Length; i++)
            {
                var dupe = false;

                IEnumerable <NuGetFramework> eqFrameworks = null;
                if (!_mappings.TryGetEquivalentFrameworks(input[i], out eqFrameworks))
                {
                    eqFrameworks = new List <NuGetFramework>()
                    {
                        input[i]
                    };
                }

                for (var j = i + 1; !dupe && j < input.Length; j++)
                {
                    dupe = eqFrameworks.Contains(input[j], comparer);
                }

                if (!dupe)
                {
                    yield return(input[i]);
                }
            }

            yield break;
        }
Esempio n. 2
0
 /// <summary>
 /// Creates a FrameworkReducer using custom framework mappings.
 /// </summary>
 public FrameworkReducer(IFrameworkNameProvider mappings, IFrameworkCompatibilityProvider compat)
 {
     _mappings       = mappings;
     _compat         = compat;
     _fullComparer   = new NuGetFrameworkFullComparer();
     _fwNameComparer = new NuGetFrameworkNameComparer();
 }
Esempio n. 3
0
        public static T GetNearest <T>(IEnumerable <T> items, NuGetFramework framework, Func <T, NuGetFramework> selector) where T : class
        {
            var reducer  = new FrameworkReducer();
            var comparer = new NuGetFrameworkFullComparer();

            var frameworkLookup = items.ToDictionary(item => selector(item));

            var nearest = reducer.GetNearest(framework, frameworkLookup.Keys) ??
                          frameworkLookup.Where(f => comparer.Equals(f.Key, NuGetFramework.AnyFramework))
                          .Select(f => f.Key)
                          .FirstOrDefault();

            if (nearest == null)
            {
                return(null);
            }

            return(frameworkLookup[nearest]);
        }