예제 #1
0
        protected override async Task <PackageBase> DoResolve(ObservableCollection <PackageBase> packages, string packageId, int depth, CancellationToken token, FrameworkName targetFramework = null, IVersionSpec versionSpec = null)
        {
            var packageInfo = await m_RepositoryService.Find(packageId, versionSpec);

            if (packageInfo == null)
            {
                return(null);
            }

            var package = packages.FirstOrDefault(pack => pack.PackageId == packageInfo.Id && pack.VersionInfo == packageInfo.Version);

            if (package != null)
            {
                return(package);
            }

            if (depth > m_SettingsManager.Settings.MaxSearchDepth)
            {
                return(null);
            }

            package = new NuGetPackage(packageInfo.Id, packageInfo.Version, await GetAvailableVersions(packageId))
            {
                Depth = depth
            };
            packages.Add(package);

            if (token.IsCancellationRequested)
            {
                return(null);
            }

            foreach (var dependencySet in packageInfo.DependencySets.Where(set => TargetFrameworkMatch(targetFramework, set)))
            {
                foreach (var dependency in dependencySet.Dependencies)
                {
                    var resolutionEngine = m_ResolutionFactory.GetResolutionEngine(dependency.Id);
                    if (resolutionEngine == null)
                    {
                        continue;
                    }

                    var dependingPackage = await resolutionEngine.Resolve(packages, dependency.Id, depth + 1, token, targetFramework, dependency.VersionSpec) ??
                                           new MissingNuGetPackage(dependency.Id);

                    package.Dependencies.Add(dependingPackage);

                    if (token.IsCancellationRequested)
                    {
                        break;
                    }
                }

                if (token.IsCancellationRequested)
                {
                    break;
                }
            }
            return(package);
        }
예제 #2
0
        private Task <PackageBase> Resolve(ObservableCollection <PackageBase> packages,
                                           string packageName,
                                           int depth,
                                           CancellationToken cancellationToken,
                                           FrameworkName targetFramework = null,
                                           IVersionSpec versionSpec      = null)
        {
            var resolutionEngine = m_ResolutionFactory.GetResolutionEngine(packageName);

            return(resolutionEngine?.Resolve(packages, packageName, depth, cancellationToken, targetFramework,
                                             versionSpec));
        }
        protected override async Task <PackageBase> DoResolve(ObservableCollection <PackageBase> packages, string packageId, int depth, CancellationToken token, FrameworkName targetFramework = null, IVersionSpec versionSpec = null)
        {
            var result = packages.FirstOrDefault(pack => pack.PackageId == packageId);

            if (result != null)
            {
                return(result);
            }

            result = new SolutionPackage(packageId, new SemanticVersion(new Version()))
            {
                Depth = depth
            };
            packages.Add(result);

            if (token.IsCancellationRequested)
            {
                return(null);
            }

            using (var solutionFileReader = new SolutionFileReader(packageId))
            {
                var readSolutionFile = solutionFileReader.ReadSolutionFile();

                var basePath = Path.GetDirectoryName(packageId);
                if (string.IsNullOrEmpty(basePath))
                {
                    return(null);
                }

                foreach (var project in readSolutionFile.Projects)
                {
                    var projectPath      = Path.Combine(basePath, project.RelativePath);
                    var resolutionEngine = m_ResolutionFactory.GetResolutionEngine(projectPath);
                    if (resolutionEngine == null)
                    {
                        continue;
                    }

                    var dependingPackage = await resolutionEngine.Resolve(packages, projectPath, depth + 1, token, targetFramework, versionSpec);

                    result.Dependencies.Add(dependingPackage);

                    if (token.IsCancellationRequested)
                    {
                        break;
                    }
                }
            }
            return(result);
        }
예제 #4
0
        protected override async Task <PackageBase> DoResolve(ObservableCollection <PackageBase> packages, string packageId, int depth, CancellationToken token, FrameworkName targetFramework = null, IVersionSpec versionSpec = null)
        {
            var result = new ProjectPackage(packageId, new SemanticVersion(new Version()))
            {
                Depth = depth
            };

            packages.Add(result);

            var baseDir = Path.GetDirectoryName(packageId);

            if (string.IsNullOrEmpty(baseDir))
            {
                return(null);
            }

            var packageFile = Path.Combine(baseDir, "packages.config");

            if (!File.Exists(packageFile))
            {
                return(null);
            }

            if (token.IsCancellationRequested)
            {
                return(null);
            }

            using (TextReader reader = new StreamReader(packageFile))
            {
                var xDocument    = XDocument.Load(reader);
                var packagesNode = xDocument.Element("packages");

                if (packagesNode == null)
                {
                    return(null);
                }

                var packageNodes = packagesNode.Elements("package");

                foreach (var pack in packageNodes)
                {
                    var id = pack.Attribute("id");
                    if (id == null)
                    {
                        continue;
                    }
                    var version = pack.Attribute("version");
                    if (version == null)
                    {
                        continue;
                    }

                    var resolutionEngine = m_ResolutionFactory.GetResolutionEngine(id.Value);
                    if (resolutionEngine == null)
                    {
                        continue;
                    }

                    var dependingPackage = await resolutionEngine.Resolve(packages, id.Value, depth + 1, token, null,
                                                                          new VersionSpec(new SemanticVersion(version.Value)));

                    result.Dependencies.Add(dependingPackage);

                    if (token.IsCancellationRequested)
                    {
                        break;
                    }
                }
            }

            return(result);
        }