public static void FixCriteria(SelectionCriteria criteria) { // workaround https://github.com/NuGet/Home/issues/1457 foreach (var criterium in criteria.Entries) { if (criterium.Properties.ContainsKey(ManagedCodeConventions.PropertyNames.TargetFrameworkMoniker) && !criterium.Properties.ContainsKey(ManagedCodeConventions.PropertyNames.RuntimeIdentifier)) { criterium.Properties.Add(ManagedCodeConventions.PropertyNames.RuntimeIdentifier, null); } } }
public ContentItemGroup FindBestItemGroup(SelectionCriteria criteria, params ContentPatternDefinition[] definitions) { foreach (var definition in definitions) { var itemGroups = FindItemGroups(definition).ToList(); foreach (var criteriaEntry in criteria.Entries) { ContentItemGroup bestGroup = null; var bestAmbiguity = false; foreach (var itemGroup in itemGroups) { var groupIsValid = true; foreach (var criteriaProperty in criteriaEntry.Properties) { if (criteriaProperty.Value == null) { if (itemGroup.Properties.ContainsKey(criteriaProperty.Key)) { groupIsValid = false; break; } } else { object itemProperty; if (!itemGroup.Properties.TryGetValue(criteriaProperty.Key, out itemProperty)) { groupIsValid = false; break; } ContentPropertyDefinition propertyDefinition; if (!definition.PropertyDefinitions.TryGetValue(criteriaProperty.Key, out propertyDefinition)) { groupIsValid = false; break; } if (!propertyDefinition.IsCriteriaSatisfied(criteriaProperty.Value, itemProperty)) { groupIsValid = false; break; } } } if (groupIsValid) { if (bestGroup == null) { bestGroup = itemGroup; } else { var groupComparison = 0; foreach (var criteriaProperty in criteriaEntry.Properties) { if (criteriaProperty.Value == null) { continue; } else { var bestGroupValue = bestGroup.Properties[criteriaProperty.Key]; var itemGroupValue = itemGroup.Properties[criteriaProperty.Key]; var propertyDefinition = definition.PropertyDefinitions[criteriaProperty.Key]; groupComparison = propertyDefinition.Compare(criteriaProperty.Value, bestGroupValue, itemGroupValue); if (groupComparison != 0) { break; } } } if (groupComparison > 0) { bestGroup = itemGroup; bestAmbiguity = false; } else if (groupComparison == 0) { bestAmbiguity = true; } } } } if (bestGroup != null) { if (bestAmbiguity) { // TODO: Something } return(bestGroup); } } } return(null); }
public bool HasItemGroup(SelectionCriteria criteria, params PatternSet[] definitions) { return(FindBestItemGroup(criteria, definitions) != null); }