/// <summary>
        /// Resolves an individual dependency for a given nodes and sets the nodes's edge to that dependency.
        /// </summary>
        /// <param name="node">The nodes to resolve the dependency for.</param>
        /// <param name="allNodesDict">List of all nodes.</param>
        /// <param name="result">The result of this dependency search.</param>
        private void ResolveDependency(Node <FrameworkOptionsTuple> node,
                                       Dictionary <string, List <Node <FrameworkOptionsTuple> > > allNodesDict,
                                       DependencySearchResult <FrameworkOptionsTuple, Framework> result)
        {
            // Framework has no config file, i.e. Microsoft.NETCore.App
            if (node.Element.Options == null)
            {
                return;
            }

            var rollForwardPolicy = node.Element.Options.RollForward;
            var frameworks        = node.Element.Options.GetAllFrameworks();

            foreach (var dependency in frameworks)
            {
                var policy = RollForwardPolicy.GetPolicy(rollForwardPolicy);

                // Get all candidate dependencies.
                var candidates = new List <Node <FrameworkOptionsTuple> >(allNodesDict.Count);
                var versions   = new List <NuGetVersion>(allNodesDict.Count);

                if (allNodesDict.TryGetValue(dependency.Name, out var dependencies))
                {
                    candidates.AddRange(dependencies);
                    versions.AddRange(dependencies.Select(x => x.Element.Framework.NuGetVersion));
                }

                if (RollForwardPolicy.TryGetSupportedVersion(policy, dependency.NuGetVersion, versions,
                                                             out var supportedVersion))
                {
                    var edge = candidates.First(x => x.Element.Framework.Version == supportedVersion.ToString());
                    node.Edges.Add(edge);
                    result.Dependencies.Add(edge.Element);
                }
                else
                {
                    result.MissingDependencies.Add(dependency);
                }
            }
        }
Esempio n. 2
0
 public RuntimeOptions(string tfm, List <Framework> frameworks, RollForwardPolicy rollForward)
 {
     Tfm         = tfm;
     Frameworks  = frameworks;
     RollForward = rollForward;
 }
Esempio n. 3
0
 public RuntimeOptions(string tfm, Framework framework, RollForwardPolicy rollForward)
 {
     Tfm         = tfm;
     Framework   = framework;
     RollForward = rollForward;
 }