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