private void ExecuteTarget(IEnumerable <EnvDTE.Project> selectedProjects, string targetName) { var output = new OutputWindowLoggerAdaptor(true); var succeeded = 0; var failed = 0; foreach (var project in selectedProjects) { project.Save(); //Save the project in Visual Studio var config = project.ConfigurationManager.ActiveConfiguration; output.OutputString($"------ Executing: '{project.Name} -> {targetName}' for '{config.ConfigurationName}|{config.PlatformName}' ------"); using (var buildManager = new BuildManager()) { var res = buildManager.Build(CreateBuildParameters(), CreateBuildRequestData(project, targetName)); if (res.OverallResult == BuildResultCode.Failure) { output.OutputString($"========== '{project.Name} -> {targetName}' FAILED =========="); failed++; } else { output.OutputString($"========== '{project.Name} -> {targetName}' succeeded =========="); succeeded++; } } if (failed == 0) { output.OutputString($"========== {targetName}: {succeeded} project(s) succeeded =========="); } else { output.OutputString($"========== {targetName}: {succeeded} project(s) succeeded, {failed} project(s) FAILED =========="); } } }
private void ExecuteTarget(IEnumerable <EnvDTE.Project> selectedProjects, string targetName) { ThreadHelper.ThrowIfNotOnUIThread(); var buildInfo = new List <ProjectBackgroundBuildInfo>(); foreach (var project in selectedProjects) { project.Save(); //Save the EnvDTE project instance // Add to ProjectBackgroundBuildInfo list var config = project.ConfigurationManager.ActiveConfiguration; buildInfo.Add(new ProjectBackgroundBuildInfo { ProjectName = project.Name, ConfigName = config.ConfigurationName, PlatformName = config.PlatformName, BuildParameters = CreateBuildParameters(), BuildRequestData = CreateBuildRequestData(project, targetName) }); } var output = new OutputWindowLoggerAdaptor(true); output.Activate(); // Run build in background thread var previousCursor = Mouse.OverrideCursor; Mouse.OverrideCursor = Cursors.Wait; Task.Run(() => { var succeeded = 0; var failed = 0; using (var buildManager = new BuildManager()) { foreach (var bi in buildInfo) { var res = buildManager.Build(bi.BuildParameters, bi.BuildRequestData); if (res.OverallResult == BuildResultCode.Failure) { output.OutputString($"========== '{bi.ProjectName} -> {targetName}' FAILED =========="); failed++; } else { output.OutputString($"========== '{bi.ProjectName} -> {targetName}' succeeded =========="); succeeded++; } if (failed == 0) { output.OutputString($"========== {targetName}: {succeeded} project(s) succeeded =========="); } else { output.OutputString($"========== {targetName}: {succeeded} project(s) succeeded, {failed} project(s) FAILED =========="); } } } }).ContinueWith(t => { Mouse.OverrideCursor = previousCursor; }, TaskScheduler.FromCurrentSynchronizationContext()); }