Beispiel #1
0
        public void StatusEventRaised(object sender, BuildStatusEventArgs e)
        {
            try
            {
                lock (syncLock)
                {
                    if (e is ProjectEvaluationStartedEventArgs projectEvaluationStarted)
                    {
                        var evaluationId      = projectEvaluationStarted.BuildEventContext.EvaluationId;
                        var projectFilePath   = Intern(projectEvaluationStarted.ProjectFile);
                        var projectName       = Intern(Path.GetFileName(projectFilePath));
                        var nodeName          = Intern(GetEvaluationProjectName(evaluationId, projectName));
                        var projectEvaluation = new ProjectEvaluation {
                            Name = nodeName
                        };
                        EvaluationFolder.AddChild(projectEvaluation);
                        projectEvaluation.ProjectFile = projectFilePath;

                        projectEvaluation.Id             = evaluationId;
                        projectEvaluation.EvaluationText = Intern("id:" + evaluationId);
                        projectEvaluation.NodeId         = e.BuildEventContext.NodeId;
                        projectEvaluation.StartTime      = e.Timestamp;
                        projectEvaluation.EndTime        = e.Timestamp;
                    }
                    else if (e is ProjectEvaluationFinishedEventArgs projectEvaluationFinished)
                    {
                        var evaluationId      = projectEvaluationFinished.BuildEventContext.EvaluationId;
                        var projectFilePath   = Intern(projectEvaluationFinished.ProjectFile);
                        var projectName       = Intern(Path.GetFileName(projectFilePath));
                        var nodeName          = Intern(GetEvaluationProjectName(evaluationId, projectName));
                        var projectEvaluation = EvaluationFolder.FindLastChild <ProjectEvaluation>(e => e.Id == evaluationId);
                        if (projectEvaluation == null)
                        {
                            // no matching ProjectEvaluationStarted
                            return;
                        }

                        projectEvaluation.EndTime = e.Timestamp;

                        var profilerResult = projectEvaluationFinished.ProfilerResult;
                        if (profilerResult != null && projectName != null)
                        {
                            ConstructProfilerResult(projectEvaluation, profilerResult.Value);
                        }

                        if (projectEvaluationFinished.GlobalProperties != null)
                        {
                            AddGlobalProperties(projectEvaluation, projectEvaluationFinished.GlobalProperties);
                        }

                        AddProperties(projectEvaluation, projectEvaluationFinished.Properties);
                        AddItems(projectEvaluation, projectEvaluationFinished.Items);
                    }
                }
            }
            catch (Exception ex)
            {
                HandleException(ex);
            }
        }
        public void StatusEventRaised(object sender, BuildStatusEventArgs e)
        {
            try
            {
                lock (syncLock)
                {
                    // This happens when we consume args created by us (deserialized)
                    if (e is ProjectEvaluationStartedEventArgs projectEvaluationStarted)
                    {
                        var evaluationId = Reflector.GetEvaluationId(projectEvaluationStarted.BuildEventContext);
                        var projectName  = Intern(projectEvaluationStarted.ProjectFile);
                        var nodeName     = Intern(GetEvaluationProjectName(evaluationId, projectName));
                        var project      = EvaluationFolder.GetOrCreateNodeWithName <Project>(nodeName);
                        if (project.ProjectFile == null)
                        {
                            project.ProjectFile = projectName;
                        }

                        // we stash the evaluation Id as a negative ProjectContextId
                        project.Id = evaluationId;
                    }
                    else if (e is ProjectEvaluationFinishedEventArgs projectEvaluationFinished)
                    {
                        var projectName    = Intern(projectEvaluationFinished.ProjectFile);
                        var profilerResult = projectEvaluationFinished.ProfilerResult;
                        if (profilerResult != null && projectName != null)
                        {
                            var evaluationId = Reflector.GetEvaluationId(projectEvaluationFinished.BuildEventContext);
                            var nodeName     = Intern(GetEvaluationProjectName(evaluationId, projectName));
                            var project      = EvaluationFolder.GetOrCreateNodeWithName <Project>(nodeName);
                            ConstructProfilerResult(project, profilerResult.Value);
                        }
                    }
                    // this happens during live build using MSBuild 15.3 or newer
                    else if (e.GetType().Name == "ProjectEvaluationStartedEventArgs")
                    {
                        var projectName  = Intern(TextUtilities.ParseQuotedSubstring(e.Message));
                        var evaluationId = Reflector.GetEvaluationId(e.BuildEventContext);
                        var nodeName     = Intern(GetEvaluationProjectName(evaluationId, projectName));
                        var project      = EvaluationFolder.GetOrCreateNodeWithName <Project>(nodeName);
                        project.Id = Reflector.GetEvaluationId(e.BuildEventContext);
                        if (project.ProjectFile == null)
                        {
                            project.ProjectFile = projectName;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                HandleException(ex);
            }
        }
        public void StatusEventRaised(object sender, BuildStatusEventArgs e)
        {
            try
            {
                lock (syncLock)
                {
                    // This happens when we consume args created by us (deserialized)
                    if (e is ProjectEvaluationStartedEventArgs projectEvaluationStarted)
                    {
                        var evaluationId      = projectEvaluationStarted.BuildEventContext.EvaluationId;
                        var projectName       = Intern(projectEvaluationStarted.ProjectFile);
                        var nodeName          = Intern(GetEvaluationProjectName(evaluationId, projectName));
                        var projectEvaluation = EvaluationFolder.GetOrCreateNodeWithName <ProjectEvaluation>(nodeName);
                        if (projectEvaluation.ProjectFile == null)
                        {
                            projectEvaluation.ProjectFile = projectName;
                        }

                        projectEvaluation.Id        = evaluationId;
                        projectEvaluation.NodeId    = e.BuildEventContext.NodeId;
                        projectEvaluation.StartTime = e.Timestamp;
                        projectEvaluation.EndTime   = e.Timestamp;
                    }
                    else if (e is ProjectEvaluationFinishedEventArgs projectEvaluationFinished)
                    {
                        var projectName       = Intern(projectEvaluationFinished.ProjectFile);
                        var evaluationId      = projectEvaluationFinished.BuildEventContext.EvaluationId;
                        var nodeName          = Intern(GetEvaluationProjectName(evaluationId, projectName));
                        var projectEvaluation = EvaluationFolder.GetOrCreateNodeWithName <ProjectEvaluation>(nodeName);
                        projectEvaluation.EndTime = e.Timestamp;

                        var profilerResult = projectEvaluationFinished.ProfilerResult;
                        if (profilerResult != null && projectName != null)
                        {
                            ConstructProfilerResult(projectEvaluation, profilerResult.Value);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                HandleException(ex);
            }
        }