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);
            }));
        }
Пример #2
0
        private static async Task StorePSWindowAsync()
        {
            await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();

            var dte = ServiceLocator.GetDTE();

            PSWindow = dte.ActiveWindow;
        }
Пример #3
0
        private static async Task <string[]> GetErrorTasksAsync(vsBuildErrorLevel errorLevel)
        {
            await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();

            var dte = ServiceLocator.GetDTE();

            dte.ExecuteCommand("View.ErrorList", " ");

            EnvDTE.Window errorListWindow = null;
            foreach (EnvDTE.Window window in dte.Windows)
            {
                if (window.Caption.StartsWith(ErrorListWindowCaption, System.StringComparison.OrdinalIgnoreCase))
                {
                    errorListWindow = window;
                    break;
                }
            }

            if (errorListWindow == null)
            {
                throw new InvalidOperationException("Unable to locate the error list");
            }

            var errorList = errorListWindow.Object as ErrorList;

            if (errorList == null)
            {
                throw new InvalidOperationException("Unable to retrieve the error list");
            }

            errorList.ShowErrors   = true;
            errorList.ShowWarnings = true;
            errorList.ShowMessages = true;

            var errorItems = errorList.ErrorItems as ErrorItems;

            if (errorItems == null)
            {
                throw new InvalidOperationException("Unable to retrieve the error list items");
            }

            var errorTasks = new List <ErrorItem>();

            for (int i = 1; i <= errorItems.Count; i++)
            {
                var errorItem         = errorItems.Item(i);
                var currentErrorLevel = (vsBuildErrorLevel)errorItem.ErrorLevel;
                if (currentErrorLevel == errorLevel)
                {
                    errorTasks.Add(errorItem);
                }
            }

            var items = errorTasks.Select(e => e.Description as string).ToArray();

            return(items);
        }
Пример #4
0
        private static async Task NewTextFileAsync()
        {
            await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();

            var dte = ServiceLocator.GetDTE();

            dte.ItemOperations.NewFile("General\\Text File");
            dte.ActiveDocument.Object("TextDocument");
        }
Пример #5
0
        private static async Task <string> GetVSVersionAsync()
        {
            await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();

            var dte     = ServiceLocator.GetDTE();
            var version = dte.Version;

            return(version);
        }
Пример #6
0
        internal static async Task <EnvDTE80.Solution2> GetDTESolutionAsync()
        {
            await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();

            var dte       = ServiceLocator.GetDTE();
            var dte2      = (EnvDTE80.DTE2)dte;
            var solution2 = dte2.Solution as EnvDTE80.Solution2;

            return(solution2);
        }
Пример #7
0
        private static async Task <string> GetBuildOutputAsync()
        {
            await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();

            var dte       = ServiceLocator.GetDTE();
            var dte2      = (DTE2)dte;
            var buildPane = dte2.ToolWindows.OutputWindow.OutputWindowPanes.Item(BuildOutputPaneName);
            var doc       = buildPane.TextDocument;
            var sel       = doc.Selection;

            sel.StartOfDocument(Extend: false);
            sel.EndOfDocument(Extend: true);
            var text = sel.Text;

            return(text);
        }
        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;
                }
            });
        }
Пример #10
0
        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;
                }
            });
        }
Пример #11
0
        public static bool IsFileExistsInProject(string projectUniqueName, string filePath)
        {
            return(ThreadHelper.JoinableTaskFactory.Run(
                       async() =>
            {
                await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();

                var dte = ServiceLocator.GetDTE();

                foreach (EnvDTE.Project project in dte.Solution.Projects)
                {
                    var solutionProjectPath = EnvDTEProjectInfoUtility.GetFullProjectPath(project);

                    if (!string.IsNullOrEmpty(solutionProjectPath) &&
                        PathUtility.GetStringComparerBasedOnOS().Equals(solutionProjectPath, projectUniqueName))
                    {
                        return await EnvDTEProjectUtility.ContainsFile(project, filePath);
                    }
                }

                return false;
            }));
        }
Пример #12
0
        private static async Task <object> NewProjectAsync(
            string templatePath,
            string outputPath,
            string templateName,
            string projectName,
            string solutionFolderName)
        {
            await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();

            await VSSolutionHelper.EnsureSolutionAsync(outputPath);

            string projectTemplateFilePath = null;

            var     dte                   = ServiceLocator.GetDTE();
            var     dte2                  = (DTE2)dte;
            var     solution2             = dte2.Solution as Solution2;
            Project solutionFolderProject = null;

            dynamic newProject = null;

            projectTemplateFilePath = await GetProjectTemplateFilePathAsync(solution2, templateName, templatePath);

            var solutionDir = Path.GetDirectoryName(solution2.FullName);

            string destPath = null;

            if (string.IsNullOrEmpty(solutionFolderName))
            {
                destPath = Path.Combine(solutionDir, projectName);
            }
            else
            {
                destPath = Path.Combine(solutionDir, Path.Combine(solutionFolderName, projectName));
            }

            var window = dte2.ActiveWindow as Window2;

            solutionFolderProject = await CreateProjectFromTemplateAsync(
                solution2,
                solutionFolderName,
                projectTemplateFilePath,
                destPath,
                projectName);

            await CloseOpenDocumentsAsync(dte2);

            await Activatex86ConfigurationsAsync(dte2);

            window.SetFocus();

            if (solutionFolderProject != null)
            {
                newProject = await VSSolutionHelper.GetProjectAsync(solutionFolderProject, projectName);
            }
            else
            {
                newProject = await VSSolutionHelper.GetProjectAsync(solution2, projectName);
            }

            if (newProject == null)
            {
                throw new InvalidOperationException(
                          "Could not create new project or could not locate newly created project");
            }

            return(newProject);
        }