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); }
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); }
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); }