/// <summary> /// Merges the content of the other runtime graph in to this runtime graph /// </summary> /// <param name="other">The other graph to merge in to this graph</param> public static RuntimeGraph Merge(RuntimeGraph left, RuntimeGraph right) { var runtimes = new Dictionary <string, RuntimeDescription>(); foreach (var runtime in left.Runtimes.Values) { runtimes[runtime.RuntimeIdentifier] = runtime.Clone(); } // Merge the right-side runtimes foreach (var runtime in right.Runtimes.Values) { // Check if we already have the runtime defined RuntimeDescription leftRuntime; if (runtimes.TryGetValue(runtime.RuntimeIdentifier, out leftRuntime)) { // Merge runtimes runtimes[runtime.RuntimeIdentifier] = RuntimeDescription.Merge(leftRuntime, runtime); } else { runtimes[runtime.RuntimeIdentifier] = runtime; } } return(new RuntimeGraph(runtimes.Values)); }
private static void WriteRuntimeDescription(JObject jObject, RuntimeDescription data) { var value = new JObject(); jObject[data.RuntimeIdentifier] = value; value["#import"] = new JArray(data.InheritedRuntimes.Select(x => new JValue(x))); foreach (var x in data.RuntimeDependencySets.Values) { WriteRuntimeDependencySet(value, x); } }
private static void WriteRuntimeDescription(IObjectWriter writer, RuntimeDescription data) { writer.WriteObjectStart(data.RuntimeIdentifier); writer.WriteNameArray("#import", data.InheritedRuntimes); var sortedDependencySets = data.RuntimeDependencySets .OrderBy(pair => pair.Key, StringComparer.Ordinal) .Select(pair => pair.Value); foreach (var set in sortedDependencySets) { WriteRuntimeDependencySet(writer, set); } writer.WriteObjectEnd(); }
/// <summary> /// Merges the content of the other runtime graph in to this runtime graph /// </summary> /// <param name="other">The other graph to merge in to this graph</param> public static RuntimeGraph Merge(RuntimeGraph left, RuntimeGraph right) { var runtimes = new Dictionary <string, RuntimeDescription>(); foreach (var runtime in left.Runtimes.Values) { runtimes[runtime.RuntimeIdentifier] = runtime.Clone(); } // Merge the right-side runtimes foreach (var runtime in right.Runtimes.Values) { // Check if we already have the runtime defined RuntimeDescription leftRuntime; if (runtimes.TryGetValue(runtime.RuntimeIdentifier, out leftRuntime)) { // Merge runtimes runtimes[runtime.RuntimeIdentifier] = RuntimeDescription.Merge(leftRuntime, runtime); } else { runtimes[runtime.RuntimeIdentifier] = runtime; } } // Copy over the right ones var supports = new Dictionary <string, CompatibilityProfile>(); foreach (var compatProfile in right.Supports) { supports[compatProfile.Key] = compatProfile.Value; } // Overwrite with non-empty profiles from left foreach (var compatProfile in left.Supports.Where(p => p.Value.RestoreContexts.Any())) { supports[compatProfile.Key] = compatProfile.Value; } return(new RuntimeGraph(runtimes, supports)); }