async Task<BuildResult> BuildSolutionItemAsync (IBuildTarget entry, ProgressMonitor monitor, ITimeTracker tt, bool skipPrebuildCheck = false, OperationContext operationContext = null) { BuildResult result = null; try { if (!skipPrebuildCheck) { tt.Trace ("Pre-build operations"); result = DoBeforeCompileAction (); } //wait for any custom tools that were triggered by the save, since the build may depend on them await MonoDevelop.Ide.CustomTools.CustomToolService.WaitForRunningTools (monitor); if (skipPrebuildCheck || result.ErrorCount == 0) { tt.Trace ("Building item"); result = await entry.Build (monitor, IdeApp.Workspace.ActiveConfiguration, true, operationContext); } } catch (Exception ex) { monitor.ReportError (GettextCatalog.GetString ("Build failed."), ex); if (result == null) result = new BuildResult (); result.AddError ("Build failed. See the build log for details."); if (result.SourceTarget == null) result.SourceTarget = entry; } finally { tt.Trace ("Done building"); } BuildDone (monitor, result, entry, tt); // BuildDone disposes the monitor return result; }