static RuntimeGraph() { var graph = JObject.Parse(RuntimeCompatibility); var runtimes = (IDictionary <string, JToken>)graph["runtimes"]; var runtimesList = runtimes.Select(kvp => new RuntimeDefinition { Name = kvp.Key, Fallbacks = CreateRuntimeDefinitions((IDictionary <string, JToken>)kvp.Value, runtimes).ToArray() }).ToArray(); Instance = new RuntimeGraph(runtimesList); }
public static PackageGraph Create(LockFile lockFile, string targetFrameworkName) { var runtimeIdentifier = RuntimeGraph.GetCurrentRuntimeId(); var fallbacks = RuntimeGraph.GetCompatibleRuntimes(runtimeIdentifier); var parsedFramework = NuGetFramework.Parse(targetFrameworkName); var dependencyGroup = FindCompatibleDependencyGroup(lockFile, parsedFramework); if (dependencyGroup == null) { return(null); } var chosenFramework = NuGetFramework.Parse(dependencyGroup.FrameworkName); var potentialFrameworks = lockFile.Targets .Where(t => t.TargetFramework.Equals(chosenFramework)); var targetFramework = potentialFrameworks .FirstOrDefault(t => runtimeIdentifier.Equals(t.RuntimeIdentifier, StringComparison.OrdinalIgnoreCase)); targetFramework = targetFramework ?? potentialFrameworks .FirstOrDefault(t => RuntimeIsCompatible(t.RuntimeIdentifier, fallbacks)); targetFramework = targetFramework ?? potentialFrameworks .FirstOrDefault(t => t.RuntimeIdentifier == null); var directDependencies = targetFramework .Libraries .Where(l => dependencyGroup.Dependencies.Any(d => d.StartsWith(l.Name, StringComparison.OrdinalIgnoreCase))) .ToArray(); var allPackages = new Dictionary <string, Package>(StringComparer.OrdinalIgnoreCase); var sources = lockFile.PackageFolders.Select(p => p.Path).ToArray(); var packages = directDependencies .Select(dd => CreatePackage(dd, targetFramework, lockFile.Libraries, allPackages, sources, fallbacks)) .ToArray(); return(new PackageGraph(sources, allPackages, packages, chosenFramework.GetShortFolderName())); }