private Dictionary <string, PackageOverride> BuildPackageOverrides() { Dictionary <string, PackageOverride> result; if (_packageOverrideItems?.Length > 0) { result = new Dictionary <string, PackageOverride>(_packageOverrideItems.Length, StringComparer.OrdinalIgnoreCase); foreach (ITaskItem packageOverrideItem in _packageOverrideItems) { PackageOverride packageOverride = PackageOverride.Create(packageOverrideItem); if (result.TryGetValue(packageOverride.PackageName, out PackageOverride existing)) { MergePackageOverrides(packageOverride, existing); } else { result[packageOverride.PackageName] = packageOverride; } } } else { result = null; } return(result); }
/// <summary> /// Merges newPackageOverride into existingPackageOverride by adding all the new overridden packages /// and taking the highest version when they both contain the same overridden package. /// </summary> private static void MergePackageOverrides(PackageOverride newPackageOverride, PackageOverride existingPackageOverride) { foreach (KeyValuePair <string, Version> newOverride in newPackageOverride.OverriddenPackages) { if (existingPackageOverride.OverriddenPackages.TryGetValue(newOverride.Key, out Version existingOverrideVersion)) { if (existingOverrideVersion < newOverride.Value) { existingPackageOverride.OverriddenPackages[newOverride.Key] = newOverride.Value; } } else { existingPackageOverride.OverriddenPackages[newOverride.Key] = newOverride.Value; } } }