/// <summary> /// A method called to notify the the tool window that an individual project build is done. /// </summary> /// <param name="project">The project.</param> /// <param name="projectConfig">The project config.</param> /// <param name="platform">The platform.</param> /// <param name="solutionConfig">The solution config.</param> /// <param name="success">True if project build was successful, otherwise false.</param> internal void NotifyBuildProjConfigDone(string project, string projectConfig, string platform, string solutionConfig, bool success) { if (!success) { _viewModel.HasBuildFailed = true; } ++NumberOfProjectsBuilt; BuildingProjects.Remove(project); Caption = GetToolWindowCaption(); _viewModel.ProgressPercentage = ProgressPercentage; }
private void BuildEvents_OnBuildProjectDone(string project, string projectconfig, string platform, string solutionconfig, bool success) { if (BuildAction == BuildActions.BuildActionDeploy) { return; } var eventTime = DateTime.Now; ProjectItem currentProject; if (BuildScope == BuildScopes.BuildScopeBatch) { currentProject = FindProjectItemInProjectsByUniqueName(project, projectconfig, platform); if (currentProject == null) { throw new InvalidOperationException(); } } else { currentProject = FindProjectItemInProjectsByUniqueName(project); if (currentProject == null) { throw new InvalidOperationException(); } } lock (_buildingProjectsLockObject) { BuildingProjects.Remove(currentProject); } BuildedProject buildedProject = BuildedProjects[currentProject]; buildedProject.Success = success; ProjectState projectState; switch (BuildAction) { case BuildActions.BuildActionBuild: case BuildActions.BuildActionRebuildAll: if (success) { bool upToDate = (_buildLogger != null && _buildLogger.Projects != null && !_buildLogger.Projects.Exists(t => t.FileName == buildedProject.FileName)); if (upToDate) { // Because ErrorBox will be empty if project is UpToDate. buildedProject.ErrorsBox = currentProject.ErrorsBox; } projectState = upToDate ? ProjectState.UpToDate : ProjectState.BuildDone; } else { bool canceled = (_buildCancelled && buildedProject.ErrorsBox.ErrorsCount == 0); projectState = canceled ? ProjectState.BuildCancelled : ProjectState.BuildError; } break; case BuildActions.BuildActionClean: projectState = success ? ProjectState.CleanDone : ProjectState.CleanError; break; case BuildActions.BuildActionDeploy: throw new InvalidOperationException("vsBuildActionDeploy not supported"); default: throw new ArgumentOutOfRangeException(); } OnBuildProjectDone(this, new BuildProjectEventArgs(currentProject, projectState, eventTime, buildedProject)); }
private void BuildEvents_OnBuildProjectDone(string project, string projectconfig, string platform, string solutionconfig, bool success) { if (BuildAction == BuildActions.BuildActionDeploy) { return; } var eventTime = DateTime.Now; var currentProject = GetCurrentProject(project, projectconfig, platform); lock (_buildingProjectsLockObject) { BuildingProjects.Remove(currentProject); } BuildedProject buildedProject = BuildedProjects[currentProject]; buildedProject.Success = success; ProjectState projectState; switch (BuildAction) { case BuildActions.BuildActionBuild: case BuildActions.BuildActionRebuildAll: if (success) { if (_viewModel.ControlSettings.GeneralSettings.ShowWarningSignForBuilds && buildedProject.ErrorsBox.WarningsCount > 0) { projectState = ProjectState.BuildWarning; } else { bool upToDate = (_buildLogger != null && _buildLogger.Projects != null && !_buildLogger.Projects.Exists(t => t.FileName == buildedProject.FileName)); if (upToDate) { // Because ErrorBox will be empty if project is UpToDate. buildedProject.ErrorsBox = currentProject.ErrorsBox; } projectState = upToDate ? ProjectState.UpToDate : ProjectState.BuildDone; } } else { bool canceled = (_buildCancelled && buildedProject.ErrorsBox.ErrorsCount == 0); projectState = canceled ? ProjectState.BuildCancelled : ProjectState.BuildError; } break; case BuildActions.BuildActionClean: projectState = success ? ProjectState.CleanDone : ProjectState.CleanError; break; case BuildActions.BuildActionDeploy: throw new InvalidOperationException("vsBuildActionDeploy not supported"); default: throw new ArgumentOutOfRangeException(nameof(BuildAction)); } buildedProject.ProjectState = projectState; OnBuildProjectDone(this, new BuildProjectEventArgs(currentProject, projectState, eventTime, buildedProject)); }