public void HandleError(BuildError error)
 {
     if (error.ErrorCode != "MSB3644")
     {
         nextFilter.HandleError(error);
     }
 }
Beispiel #2
0
 public void HandleError(BuildError error)
 {
     error.ErrorText = FixEncoding(error.ErrorText);
     error.FileName  = FixEncoding(error.FileName);
     error.Column    = FixColumn(error.FileName, error.Line, error.Column);
     nextFilter.HandleError(error);
 }
 public void HandleError(BuildError error)
 {
     if (insideTask)
     {
         baseFilter.HandleError(error);
     }
     else
     {
         nextFilter.HandleError(error);
     }
 }
 public void RunJob(BuildJob job, IMSBuildChainedLoggerFilter loggerChain, Action <bool> reportWhenDone, CancellationToken cancellationToken)
 {
     Debug.Assert(loggerChain != null);
     this.loggerChain    = loggerChain;
     this.reportWhenDone = reportWhenDone;
     try {
         process.Writer.Write("StartBuild");
         job.WriteTo(process.Writer);
         this.cancellationRegistration = cancellationToken.Register(OnCancel);
     } catch (IOException ex) {
         // "Pipe is broken"
         loggerChain.HandleError(new BuildError(null, 0, 0, null, "Error talking to build worker: " + ex.Message));
         BuildDone(false);
     }
 }
            void process_ProcessExited(object sender, EventArgs e)
            {
                bool reportBuildError = false;

                lock (parentManager.freeWorkers) {
                    if (isFree)
                    {
                        parentManager.freeWorkers.Remove(this);
                        MarkAsInUse();
                    }
                    else
                    {
                        reportBuildError = (reportWhenDone != null);                         // only if not done
                    }
                }
                if (reportBuildError)
                {
                    loggerChain.HandleError(new BuildError(null, 0, 0, null, "Build worker process exited unexpectedly."));
                    BuildDone(false);
                }
                process.Dispose();
            }
			public void RunJob(BuildJob job, IMSBuildChainedLoggerFilter loggerChain, Action<bool> reportWhenDone, CancellationToken cancellationToken)
			{
				Debug.Assert(loggerChain != null);
				this.loggerChain = loggerChain;
				this.reportWhenDone = reportWhenDone;
				try {
					process.Writer.Write("StartBuild");
					job.WriteTo(process.Writer);
					this.cancellationRegistration = cancellationToken.Register(OnCancel);
				} catch (IOException ex) {
					// "Pipe is broken"
					loggerChain.HandleError(new BuildError(null, 0, 0, null, "Error talking to build worker: " + ex.Message));
					BuildDone(false);
				}
			}
Beispiel #7
0
		void StartBuild()
		{
			Dictionary<string, string> globalProperties = new Dictionary<string, string>();
			MSBuildBasedProject.InitializeMSBuildProjectProperties(globalProperties);
			
			foreach (KeyValuePair<string, string> pair in options.Properties) {
				LoggingService.Debug("Setting property " + pair.Key + " to '" + pair.Value + "'");
				globalProperties[pair.Key] = pair.Value;
			}
			globalProperties["Configuration"] = options.Configuration;
			if (options.Platform == "Any CPU")
				globalProperties["Platform"] = "AnyCPU";
			else
				globalProperties["Platform"] = options.Platform;
			
			InterestingTasks.AddRange(MSBuildEngine.CompileTaskNames);
			
			loggers.Add(new SharpDevelopLogger(this));
			if (options.BuildOutputVerbosity == BuildOutputVerbosity.Diagnostic) {
				this.ReportMessageEvents = true;
				this.ReportAllTaskFinishedEvents = true;
				this.ReportAllTaskStartedEvents = true;
				this.ReportTargetFinishedEvents = true;
				this.ReportTargetStartedEvents = true;
				this.ReportUnknownEvents = true;
				loggers.Add(new SDConsoleLogger(feedbackSink, LoggerVerbosity.Diagnostic));
				globalProperties["MSBuildTargetsVerbose"] = "true";
			}
			//loggers.Add(new BuildLogFileLogger(project.FileName + ".log", LoggerVerbosity.Diagnostic));
			foreach (IMSBuildAdditionalLogger loggerProvider in MSBuildEngine.AdditionalMSBuildLoggers) {
				loggers.Add(loggerProvider.CreateLogger(this));
			}
			
			loggerChain = new EndOfChain(this);
			foreach (IMSBuildLoggerFilter loggerFilter in MSBuildEngine.MSBuildLoggerFilters) {
				loggerChain = loggerFilter.CreateFilter(this, loggerChain) ?? loggerChain;
			}
			
			WriteAdditionalTargetsToTempFile(globalProperties);
			
			BuildJob job = new BuildJob();
			job.ProjectFileName = projectFileName;
			job.Target = options.Target.TargetName;
			
			// First remove the flags for the controllable events.
			job.EventMask = EventTypes.All & ~ControllableEvents;
			// Add back active controllable events.
			if (ReportMessageEvents)
				job.EventMask |= EventTypes.Message;
			if (ReportTargetStartedEvents)
				job.EventMask |= EventTypes.TargetStarted;
			if (ReportTargetFinishedEvents)
				job.EventMask |= EventTypes.TargetFinished;
			if (ReportAllTaskStartedEvents)
				job.EventMask |= EventTypes.TaskStarted;
			if (ReportAllTaskFinishedEvents)
				job.EventMask |= EventTypes.TaskFinished;
			if (ReportUnknownEvents)
				job.EventMask |= EventTypes.Unknown;
			
			if (!(ReportAllTaskStartedEvents && ReportAllTaskFinishedEvents)) {
				// just some TaskStarted & TaskFinished events should be reported
				job.InterestingTaskNames.AddRange(InterestingTasks);
			}
			foreach (var pair in globalProperties) {
				job.Properties.Add(pair.Key, pair.Value);
			}
			
			foreach (ILogger logger in loggers) {
				logger.Initialize(eventSource);
			}
			
			if (projectMinimumSolutionVersion <= Solution.SolutionVersionVS2008) {
				if (DotnetDetection.IsDotnet35SP1Installed()) {
					BuildWorkerManager.MSBuild35.RunBuildJob(job, loggerChain, OnDone, feedbackSink.ProgressMonitor.CancellationToken);
				} else {
					loggerChain.HandleError(new BuildError(job.ProjectFileName, ".NET 3.5 SP1 is required to build this project."));
					OnDone(false);
				}
			} else {
				BuildWorkerManager.MSBuild40.RunBuildJob(job, loggerChain, OnDone, feedbackSink.ProgressMonitor.CancellationToken);
			}
		}
        internal Task <bool> RunBuildAsync(CancellationToken cancellationToken)
        {
            Dictionary <string, string> globalProperties = new Dictionary <string, string>();

            globalProperties.AddRange(SD.MSBuildEngine.GlobalBuildProperties);

            foreach (KeyValuePair <string, string> pair in options.Properties)
            {
                LoggingService.Debug("Setting property " + pair.Key + " to '" + pair.Value + "'");
                globalProperties[pair.Key] = pair.Value;
            }
            globalProperties["Configuration"] = options.Configuration;
            if (options.Platform == "Any CPU")
            {
                globalProperties["Platform"] = "AnyCPU";
            }
            else
            {
                globalProperties["Platform"] = options.Platform;
            }

            InterestingTasks.AddRange(parentBuildEngine.CompileTaskNames);

            loggers.Add(new SharpDevelopLogger(this));
            if (options.BuildOutputVerbosity == BuildOutputVerbosity.Diagnostic)
            {
                this.ReportMessageEvents         = true;
                this.ReportAllTaskFinishedEvents = true;
                this.ReportAllTaskStartedEvents  = true;
                this.ReportTargetFinishedEvents  = true;
                this.ReportTargetStartedEvents   = true;
                this.ReportUnknownEvents         = true;
                loggers.Add(new SDConsoleLogger(feedbackSink, LoggerVerbosity.Diagnostic));
                globalProperties["MSBuildTargetsVerbose"] = "true";
            }
            //loggers.Add(new BuildLogFileLogger(project.FileName + ".log", LoggerVerbosity.Diagnostic));
            foreach (IMSBuildAdditionalLogger loggerProvider in parentBuildEngine.AdditionalMSBuildLoggers)
            {
                loggers.Add(loggerProvider.CreateLogger(this));
            }

            loggerChain = new EndOfChain(this);
            foreach (IMSBuildLoggerFilter loggerFilter in parentBuildEngine.MSBuildLoggerFilters)
            {
                loggerChain = loggerFilter.CreateFilter(this, loggerChain) ?? loggerChain;
            }

            WriteAdditionalTargetsToTempFile(globalProperties);

            BuildJob job = new BuildJob();

            job.ProjectFileName = projectFileName;
            job.Target          = options.Target.TargetName;

            // First remove the flags for the controllable events.
            job.EventMask = EventTypes.All & ~ControllableEvents;
            // Add back active controllable events.
            if (ReportMessageEvents)
            {
                job.EventMask |= EventTypes.Message;
            }
            if (ReportTargetStartedEvents)
            {
                job.EventMask |= EventTypes.TargetStarted;
            }
            if (ReportTargetFinishedEvents)
            {
                job.EventMask |= EventTypes.TargetFinished;
            }
            if (ReportAllTaskStartedEvents)
            {
                job.EventMask |= EventTypes.TaskStarted;
            }
            if (ReportAllTaskFinishedEvents)
            {
                job.EventMask |= EventTypes.TaskFinished;
            }
            if (ReportUnknownEvents)
            {
                job.EventMask |= EventTypes.Unknown;
            }

            if (!(ReportAllTaskStartedEvents && ReportAllTaskFinishedEvents))
            {
                // just some TaskStarted & TaskFinished events should be reported
                job.InterestingTaskNames.AddRange(InterestingTasks);
            }
            foreach (var pair in globalProperties)
            {
                job.Properties.Add(pair.Key, pair.Value);
            }

            foreach (ILogger logger in loggers)
            {
                logger.Initialize(eventSource);
            }

            tcs = new TaskCompletionSource <bool>();
            if (projectMinimumSolutionVersion <= SolutionFormatVersion.VS2008)
            {
                if (DotnetDetection.IsDotnet35SP1Installed())
                {
                    BuildWorkerManager.MSBuild35.RunBuildJob(job, loggerChain, OnDone, cancellationToken);
                }
                else
                {
                    loggerChain.HandleError(new BuildError(job.ProjectFileName, ".NET 3.5 SP1 is required to build this project."));
                    tcs.SetResult(false);
                }
            }
            else
            {
                BuildWorkerManager.MSBuild40.RunBuildJob(job, loggerChain, OnDone, cancellationToken);
            }
            return(tcs.Task);
        }
            public void HandleError(BuildError error)
            {
                LoggingService.Debug("FxCopLogger got " + error.ToString());

                string[] moreData = (error.Subcategory ?? "").Split('|');
                string   checkId  = error.ErrorCode;

                error.ErrorCode = (error.ErrorCode != null) ? error.ErrorCode.Split(':')[0] : null;
                if (FileUtility.IsValidPath(error.FileName) &&
                    Path.GetFileName(error.FileName) == "SharpDevelop.CodeAnalysis.targets")
                {
                    error.FileName = null;
                }
                IProject project = ProjectService.GetProject(engineWorker.ProjectFileName);

                if (project != null)
                {
                    IProjectContent pc = ParserService.GetProjectContent(project);
                    if (pc != null)
                    {
                        if (error.FileName != null)
                        {
                            int pos = error.FileName.IndexOf("positionof#", StringComparison.Ordinal);
                            if (pos >= 0)
                            {
                                string       memberName = error.FileName.Substring(pos + 11);
                                FilePosition filePos    = GetPosition(pc, memberName);
                                if (filePos.IsEmpty == false && filePos.CompilationUnit != null)
                                {
                                    error.FileName = filePos.FileName ?? "";
                                    error.Line     = filePos.Line;
                                    error.Column   = filePos.Column;
                                }
                                else
                                {
                                    error.FileName = null;
                                }
                            }
                        }

                        if (moreData.Length > 1 && !string.IsNullOrEmpty(moreData[0]))
                        {
                            error.Tag = new FxCopTaskTag {
                                ProjectContent = pc,
                                TypeName       = moreData[0],
                                MemberName     = moreData[1],
                                Category       = error.HelpKeyword,
                                CheckID        = checkId
                            };
                        }
                        else
                        {
                            error.Tag = new FxCopTaskTag {
                                ProjectContent = pc,
                                Category       = error.HelpKeyword,
                                CheckID        = checkId
                            };
                        }
                        error.ContextMenuAddInTreeEntry = "/SharpDevelop/Pads/ErrorList/CodeAnalysisTaskContextMenu";
                        if (moreData.Length > 2)
                        {
                            (error.Tag as FxCopTaskTag).MessageID = moreData[2];
                        }
                    }
                }
                nextChainElement.HandleError(error);
            }