public IEnumerable <IVsPackageMetadata> GetInstalledPackages() { var packages = new HashSet <IVsPackageMetadata>(new VsPackageMetadataComparer()); return(NuGetUIThreadHelper.JoinableTaskFactory.Run(async delegate { // Calls may occur in the template wizard before the solution is actually created, // in that case return no projects if (_solutionManager != null && !string.IsNullOrEmpty(_solutionManager.SolutionDirectory)) { InitializePackageManagerAndPackageFolderPath(); foreach (var project in (await _solutionManager.GetNuGetProjectsAsync())) { FallbackPackagePathResolver pathResolver = null; var buildIntegratedProject = project as BuildIntegratedNuGetProject; if (buildIntegratedProject != null) { pathResolver = await GetPackagesPathResolverAsync(buildIntegratedProject); } var installedPackages = await project.GetInstalledPackagesAsync(CancellationToken.None); foreach (var package in installedPackages) { var identity = package.PackageIdentity; if (!identity.HasVersion) { // Currently we are not supporting floating versions // because of that we will skip this package continue; } // find packages using the solution level packages folder string installPath; if (buildIntegratedProject != null) { installPath = pathResolver.GetPackageDirectory(identity.Id, identity.Version); } else { installPath = _packageManager .PackagesFolderNuGetProject .GetInstalledPath(identity); } var metadata = new VsPackageMetadata(package.PackageIdentity, installPath); packages.Add(metadata); } } } return packages; })); }
private async Task <NuGetProject[]> GetProjectsAsync(IReadOnlyCollection <string> projectIds) { Assumes.NotNullOrEmpty(projectIds); IVsSolutionManager solutionManager = await _state.SolutionManager.GetValueAsync(CancellationToken.None); Assumes.NotNull(solutionManager); NuGetProject[] projects = (await solutionManager.GetNuGetProjectsAsync()) .Where(p => projectIds.Contains(p.GetMetadata <string>(NuGetProjectMetadataKeys.ProjectId))) .ToArray(); return(projects); }
public string[] GetAvailableProjects() { Debug.Assert(_solutionManager != null); return(NuGetUIThreadHelper.JoinableTaskFactory.Run(async delegate { var displayNames = new List <string>(); var displayNameTasks = new List <Task <string> >(); // start a single task to get all project's safe name var safeNamesTask = Task.Run(async() => await _solutionManager.GetAllNuGetProjectSafeNameAsync()); var allProjects = await _solutionManager.GetNuGetProjectsAsync(); foreach (var project in allProjects) { // Throttle and wait for a task to finish if we have hit the limit if (displayNameTasks.Count == MaxTasks) { var displayName = await CompleteTaskAsync(displayNameTasks); displayNames.Add(displayName); } var displayNameTask = Task.Run(async() => await GetDisplayNameAsync(project)); displayNameTasks.Add(displayNameTask); } // wait until all the tasks to retrieve display names are completed while (displayNameTasks.Count > 0) { var displayName = await CompleteTaskAsync(displayNameTasks); displayNames.Add(displayName); } _projectSafeNames = (await safeNamesTask).ToArray(); Array.Sort(displayNames.ToArray(), _projectSafeNames, StringComparer.CurrentCultureIgnoreCase); return _projectSafeNames; })); }
public IEnumerable <IVsPackageMetadata> GetInstalledPackages() { try { var packages = new HashSet <IVsPackageMetadata>(new VsPackageMetadataComparer()); return(_threadingService.JoinableTaskFactory.Run(async delegate { // Calls may occur in the template wizard before the solution is actually created, // in that case return no projects if (_solutionManager != null && !string.IsNullOrEmpty(_solutionManager.SolutionDirectory)) { //switch to background thread await TaskScheduler.Default; NuGetPackageManager nuGetPackageManager = CreateNuGetPackageManager(); foreach (var project in (await _solutionManager.GetNuGetProjectsAsync())) { FallbackPackagePathResolver pathResolver = null; var buildIntegratedProject = project as BuildIntegratedNuGetProject; if (buildIntegratedProject != null) { pathResolver = await GetPackagesPathResolverAsync(buildIntegratedProject); } var installedPackages = await project.GetInstalledPackagesAsync(CancellationToken.None); foreach (var package in installedPackages) { var identity = package.PackageIdentity; if (!identity.HasVersion) { // Currently we are not supporting floating versions // because of that we will skip this package continue; } // find packages using the solution level packages folder string installPath; if (buildIntegratedProject != null) { installPath = pathResolver.GetPackageDirectory(identity.Id, identity.Version); } else { installPath = nuGetPackageManager .PackagesFolderNuGetProject .GetInstalledPath(identity); } var metadata = new VsPackageMetadata(package.PackageIdentity, installPath); packages.Add(metadata); } } } return packages; })); } catch (Exception exception) { _telemetryProvider.PostFault(exception, typeof(VsPackageInstallerServices).FullName); throw; } }