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);
 }