protected override void OnWriteLogObject(object logObject) { var buildSessionStarted = logObject as BuildSessionStartedEvent; var buildSessionFinished = logObject as BuildSessionFinishedEvent; if (buildSessionStarted != null) { ProjectSystemService.OnBuildSessionStarted(buildSessionStarted); } else if (buildSessionFinished != null) { ProjectSystemService.OnBuildSessionFinished(buildSessionFinished); } }
ProcessWrapper StartProcess(string command, string arguments, string workingDirectory, TextWriter outWriter, TextWriter errorWriter, EventHandler exited) { int currentSessionId = Interlocked.Increment(ref sessionId); var msbuildProcessArguments = new MSBuildProcessArguments(arguments); var buildTarget = new MSBuildTarget { ProjectName = GettextCatalog.GetString("Solution"), ProjectFileName = GettextCatalog.GetString("Solution"), Targets = msbuildProcessArguments.Targets, BuildType = msbuildProcessArguments.BuildType, Dimensions = GetDimensions(msbuildProcessArguments.Targets) }; buildTarget.Start(); arguments = MSBuildProcessArguments.AddVerbosity(arguments, Runtime.Preferences.MSBuildVerbosity.Value); arguments = MSBuildProcessArguments.AddBinLogFileName(arguments, buildTarget.BinLogFileName); lock (buildTargets) { buildTargets [currentSessionId] = buildTarget; } ProjectSystemService.OnTargetStarted(buildTarget); var monitor = new MSBuildProcessProgressMonitor(outWriter, errorWriter, buildTarget.LogFileName); ProcessWrapper process = Runtime.ProcessService.StartProcess( command, arguments, workingDirectory, monitor.Log, monitor.ErrorLog, exited); monitor.Process = process; process.Task.ContinueWith(_ => { OnMSBuildProcessExited(currentSessionId, monitor); }); return(process); }
public MSBuildTargetMonitor( Project project, string target, ConfigurationSelector configuration, TargetEvaluationContext context) { // Ensure log verbosity is set for non-build targets. this.context = context; context.LogVerbosity = Runtime.Preferences.MSBuildVerbosity.Value; buildTarget = new MSBuildTarget { ProjectName = project.Name, ProjectFileName = project.FileName, Targets = target ?? string.Empty, BuildType = MSBuildTarget.GetBuildType(target), Dimensions = project.GetDimensions(configuration) }; buildTarget.Start(); ProjectSystemService.OnTargetStarted(buildTarget); }
void OnMSBuildProcessExited(int currentSessionId, MSBuildProcessProgressMonitor monitor) { MSBuildTarget buildTarget = null; using (monitor) { lock (buildTargets) { if (buildTargets.TryGetValue(currentSessionId, out buildTarget)) { buildTargets.Remove(currentSessionId); } else { return; } } if (monitor.Process.Task.IsFaulted) { buildTarget.OnException(monitor.Process.Task.Exception); } else if (monitor.Process.Task.IsCanceled) { buildTarget.OnResult(MSBuildTargetStatus.Failed); } else if (monitor.Process.ProcessAsyncOperation.ExitCode == 0) { buildTarget.OnResult(MSBuildTargetStatus.Finished); } else { buildTarget.OnResult(MSBuildTargetStatus.Failed); } } ProjectSystemService.OnTargetFinished(buildTarget); }
public void OnException(Exception ex) { buildTarget.OnException(ex); ProjectSystemService.OnTargetFinished(buildTarget); }
public void OnResult(TargetEvaluationResult result) { buildTarget.OnResult(result); ProjectSystemService.OnTargetFinished(buildTarget); }