Example #1
0
        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);
        }
Example #2
0
        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()));
        }