public static bool BatchEventsApi(string id, string version)
        {
            return(ThreadHelper.JoinableTaskFactory.Run(
                       async() =>
            {
                await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();

                var dte = ServiceLocator.GetDTE();
                var packageProjectEventService = ServiceLocator.GetComponent <IVsPackageInstallerProjectEvents>();
                var installerServices = ServiceLocator.GetComponent <IVsPackageInstaller>();
                var batchStartIds = new List <string>();
                var batchEndIds = new List <string>();

                packageProjectEventService.BatchStart += (args) =>
                {
                    batchStartIds.Add(args.BatchId);
                };

                packageProjectEventService.BatchEnd += (args) =>
                {
                    batchEndIds.Add(args.BatchId);
                };

                foreach (EnvDTE.Project project in dte.Solution.Projects)
                {
                    installerServices.InstallPackage(null, project, id, version, false);
                }

                return batchStartIds.Count == 1 &&
                batchEndIds.Count == 1 &&
                batchStartIds[0].Equals(batchEndIds[0], StringComparison.Ordinal);
            }));
        }
 public static IVsProjectJsonToPackageReferenceMigrateResult MigrateJsonProject(string projectName)
 {
     return(ThreadHelper.JoinableTaskFactory.Run(async() =>
     {
         var migrator = ServiceLocator.GetComponent <IVsProjectJsonToPackageReferenceMigrator>();
         return (IVsProjectJsonToPackageReferenceMigrateResult)await migrator.MigrateProjectJsonToPackageReferenceAsync(projectName);
     }));
 }
        public static IVsPathContext GetVsPathContext(string projectUniqueName)
        {
            var provider = ServiceLocator.GetComponent <IVsPathContextProvider>();

            IVsPathContext context;

            if (provider.TryCreateContext(projectUniqueName, out context))
            {
                return(context);
            }

            return(null);
        }
        public static bool ExecuteInitScript(string id, string version, int timeoutSec = 30)
        {
            var scriptExecutor = ServiceLocator.GetComponent <IVsGlobalPackagesInitScriptExecutor>();
            // It is important that this method does not wait on ExecuteInitScriptAsync on the calling thread.
            // Calling thread is powershell execution thread and ExecuteInitScriptAsync needs to switch to
            // Powershell execution thread to execute the scripts
            var task = Task.Run(() => scriptExecutor.ExecuteInitScriptAsync(id, version));

            Task.WaitAny(task, Task.Delay(TimeSpan.FromSeconds(timeoutSec)));
            if (task.IsCompleted)
            {
                return(task.Result);
            }

            return(false);
        }
        public static void RestorePackageApi()
        {
            ThreadHelper.JoinableTaskFactory.Run(
                async() =>
            {
                await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();

                var dte      = ServiceLocator.GetDTE();
                var restorer = ServiceLocator.GetComponent <IVsPackageRestorer>();

                foreach (EnvDTE.Project project in dte.Solution.Projects)
                {
                    restorer.RestorePackages(project);
                    return;
                }
            });
        }
        public static void UninstallPackageApi(string id, bool dependency)
        {
            ThreadHelper.JoinableTaskFactory.Run(
                async() =>
            {
                await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();

                var dte         = ServiceLocator.GetDTE();
                var uninstaller = ServiceLocator.GetComponent <IVsPackageUninstaller>();

                foreach (EnvDTE.Project project in dte.Solution.Projects)
                {
                    uninstaller.UninstallPackage(project, id, dependency);
                    return;
                }
            });
        }
        public static void InstallPackageApi(string source, string id, string version, bool prerelease)
        {
            ThreadHelper.JoinableTaskFactory.Run(
                async() =>
            {
                await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();

                var dte      = ServiceLocator.GetDTE();
                var services = ServiceLocator.GetComponent <IVsPackageInstaller>();

                foreach (EnvDTE.Project project in dte.Solution.Projects)
                {
                    services.InstallPackage(source, project, id, version, prerelease);
                    return;
                }
            });
        }
        public static async Task <IVsProjectJsonToPackageReferenceMigrateResult> MigrateJsonProject(string projectName)
        {
            var migrator = ServiceLocator.GetComponent <IVsProjectJsonToPackageReferenceMigrator>();

            return((IVsProjectJsonToPackageReferenceMigrateResult)await migrator.MigrateProjectJsonToPackageReferenceAsync(projectName));
        }