public static void RemoveBuild(MsBuildEx build) { lock (_builds) { _builds.Remove(build); } }
public override bool Execute() { while (MsBuildEx.AnyBuildsRunning) { foreach (var msbuild in MsBuildEx.Builds) { // Yeah, as if this ever worked... // (BuildEngine as IBuildEngine3).Yield(); BuildMessage message; while (msbuild.Messages.TryDequeue(out message)) { if (!Environment.GetEnvironmentVariable("HIDE_THREADS").IsTrue()) { message.Message = "{0,4} » {1}".format(msbuild.Index, message.Message); } switch (message.EventType) { case "BuildWarning": Log.LogWarning(message.Subcategory, message.Code, message.HelpKeyword, message.File, message.LineNumber, message.ColumnNumber, message.EndLineNumber, message.EndColumnNumber, message.Message); break; case "BuildError": Log.LogError(message.Subcategory, message.Code, message.HelpKeyword, message.File, message.LineNumber, message.ColumnNumber, message.EndLineNumber, message.EndColumnNumber, message.Message); break; case "ProjectStarted": Log.LogExternalProjectStarted(message.Message, message.HelpKeyword, message.ProjectFile, message.TargetNames); break; case "ProjectFinished": Log.LogExternalProjectFinished(message.Message, message.HelpKeyword, message.ProjectFile, message.Succeeded); break; case "TaskStarted": // Log.LogMessage(MessageImportance.Low, message.Message); break; case "TaskFinished": // Log.LogMessage(MessageImportance.Low, message.Message); break; case "TargetStarted": // Log.LogMessage(MessageImportance.Low, message.Message); break; case "TargetFinished": // Log.LogMessage(MessageImportance.Low, message.Message); break; case "BuildStarted": // Log.LogMessage(MessageImportance.Low, message.Message); break; case "BuildFinished": // Log.LogMessage(MessageImportance.Low, message.Message); break; case "BuildMessage": Log.LogMessage((MessageImportance)message.Importance, message.Message); break; default: // Log.LogMessage(MessageImportance.Low, message.Message); break; } } // psshhhh. // (BuildEngine as IBuildEngine3).Reacquire(); if (msbuild.Completed.WaitOne(0)) { // remove it from the list of active builds MsBuildEx.RemoveBuild(msbuild); // if it failed, then signal the build as a failure if (!msbuild.Result) { MsBuildEx.KillOutstandingBuilds(); return(false); } } } } return(true); }