예제 #1
0
		public MSBuildResult[] RunTarget (string target, ProjectConfigurationInfo[] configurations, ILogWriter logWriter,
			MSBuildVerbosity verbosity)
		{
			MSBuildResult[] result = null;
			BuildEngine.RunSTA (delegate
			{
				try {
					var project = SetupProject (configurations);
					currentLogWriter = logWriter;

					LocalLogger logger = new LocalLogger (Path.GetDirectoryName (file));
					engine.UnregisterAllLoggers ();
					engine.RegisterLogger (logger);
					engine.RegisterLogger (consoleLogger);

					consoleLogger.Verbosity = GetVerbosity (verbosity);
					
					project.Build (target);
					
					result = logger.BuildResult.ToArray ();
		//		} catch (InvalidProjectFileException ex) {
		//			result = new MSBuildResult[] { new MSBuildResult (false, ex.ProjectFile ?? file, ex.LineNumber, ex.ColumnNumber, ex.ErrorCode, ex.Message) };
				} finally {
					currentLogWriter = null;
				}
			});
			return result;
		}
        public MSBuildResult[] RunTarget(string target, ProjectConfigurationInfo[] configurations, ILogWriter logWriter,
                                         MSBuildVerbosity verbosity)
        {
            MSBuildResult[] result = null;
            BuildEngine.RunSTA(delegate
            {
                try {
                    var project      = SetupProject(configurations);
                    currentLogWriter = logWriter;

                    var logger = new LocalLogger(file);
                    engine.UnregisterAllLoggers();
                    engine.RegisterLogger(logger);
                    engine.RegisterLogger(consoleLogger);

                    consoleLogger.Verbosity = GetVerbosity(verbosity);

                    project.Build(target);

                    result = logger.BuildResult.ToArray();
                } catch (Microsoft.Build.Exceptions.InvalidProjectFileException ex) {
                    var r = new MSBuildResult(
                        file, false, ex.ErrorSubcategory, ex.ErrorCode, ex.ProjectFile,
                        ex.LineNumber, ex.ColumnNumber, ex.EndLineNumber, ex.EndColumnNumber,
                        ex.BaseMessage, ex.HelpKeyword);
                    logWriter.WriteLine(r.ToString());
                    result = new [] { r };
                } finally {
                    currentLogWriter = null;
                }
            });
            return(result);
        }
예제 #3
0
        public MSBuildResult[] RunTarget(string target, ProjectConfigurationInfo[] configurations, ILogWriter logWriter,
                                         MSBuildVerbosity verbosity)
        {
            MSBuildResult[] result = null;
            BuildEngine.RunSTA(delegate
            {
                try {
                    var project      = SetupProject(configurations);
                    currentLogWriter = logWriter;

                    LocalLogger logger = new LocalLogger(Path.GetDirectoryName(file));
                    engine.UnregisterAllLoggers();
                    engine.RegisterLogger(logger);
                    engine.RegisterLogger(consoleLogger);

                    consoleLogger.Verbosity = GetVerbosity(verbosity);

                    project.Build(target);

                    result = logger.BuildResult.ToArray();
                    //		} catch (InvalidProjectFileException ex) {
                    //			result = new MSBuildResult[] { new MSBuildResult (false, ex.ProjectFile ?? file, ex.LineNumber, ex.ColumnNumber, ex.ErrorCode, ex.Message) };
                } finally {
                    currentLogWriter = null;
                }
            });
            return(result);
        }
예제 #4
0
        public MSBuildResult[] RunTarget(string target, ProjectConfigurationInfo[] configurations, ILogWriter logWriter,
                                         MSBuildVerbosity verbosity)
        {
            MSBuildResult[] result = null;
            BuildEngine.RunSTA(delegate
            {
                try {
                    var project      = SetupProject(configurations);
                    currentLogWriter = logWriter;

                    LocalLogger logger = new LocalLogger(Path.GetDirectoryName(file));
                    engine.UnregisterAllLoggers();
                    engine.RegisterLogger(logger);
                    engine.RegisterLogger(consoleLogger);

                    consoleLogger.Verbosity = GetVerbosity(verbosity);

                    // We are using this BuildProject overload and the BuildSettings.None argument as a workaround to
                    // an xbuild bug which causes references to not be resolved after the project has been built once.
                    engine.BuildProject(project, new string[] { target }, new Hashtable(), BuildSettings.None);

                    result = logger.BuildResult.ToArray();
                } catch (InvalidProjectFileException ex) {
                    result = new MSBuildResult[] { new MSBuildResult(false, ex.ProjectFile ?? file, ex.LineNumber, ex.ColumnNumber, ex.ErrorCode, ex.Message) };
                } finally {
                    currentLogWriter = null;
                }
            });
            return(result);
        }
예제 #5
0
        void BeginBuildOperation(IEngineLogWriter logWriter, string binLogFilePath, MSBuildVerbosity verbosity, ProjectConfigurationInfo [] configurations)
        {
            // Start a new MSBuild build session, sending log to the provided writter

            RunSTA(delegate {
                BuildOperationStarted = true;
                // This property specifies the mapping between the solution configuration
                // and the project configurations
                engine.SetGlobalProperty("CurrentSolutionConfigurationContents", ProjectBuilder.GenerateSolutionConfigurationContents(configurations));
                BuildParameters parameters = new BuildParameters(engine);
                sessionLogWriter           = logWriter;
                loggerAdapter = new MSBuildLoggerAdapter(logWriter, verbosity);

                if (!string.IsNullOrEmpty(binLogFilePath))
                {
                    var binaryLogger = new BinaryLogger {
                        Parameters = binLogFilePath,
                        Verbosity  = LoggerVerbosity.Diagnostic
                    };

                    var loggers = new List <ILogger> (loggerAdapter.Loggers);
                    loggers.Add(binaryLogger);
                    parameters.Loggers = loggers;
                }
                else
                {
                    parameters.Loggers = loggerAdapter.Loggers;
                }

                BuildManager.DefaultBuildManager.BeginBuild(parameters);
            });
        }
예제 #6
0
		public MSBuildResult[] RunTarget (string target, ProjectConfigurationInfo[] configurations, ILogWriter logWriter,
			MSBuildVerbosity verbosity)
		{
			MSBuildResult[] result = null;
			BuildEngine.RunSTA (delegate
			{
				try {
					var project = SetupProject (configurations);
					currentLogWriter = logWriter;

					var logger = new LocalLogger (file);
					buildEngine.Engine.UnregisterAllLoggers ();
					buildEngine.Engine.RegisterLogger (logger);
					buildEngine.Engine.RegisterLogger (consoleLogger);

					consoleLogger.Verbosity = GetVerbosity (verbosity);

					// We are using this BuildProject overload and the BuildSettings.None argument as a workaround to
					// an xbuild bug which causes references to not be resolved after the project has been built once.
					buildEngine.Engine.BuildProject (project, new [] { target }, new Hashtable (), BuildSettings.None);
					
					result = logger.BuildResult.ToArray ();
				} catch (InvalidProjectFileException ex) {
					var r = new MSBuildResult (
						file, false, ex.ErrorSubcategory, ex.ErrorCode, ex.ProjectFile,
						ex.LineNumber, ex.ColumnNumber, ex.EndLineNumber, ex.EndColumnNumber,
						ex.BaseMessage, ex.HelpKeyword);
					logWriter.WriteLine (r.ToString ());
					result = new [] { r };
				} finally {
					currentLogWriter = null;
				}
			});
			return result;
		}
예제 #7
0
		public MSBuildResult[] RunTarget (string target, ProjectConfigurationInfo[] configurations, ILogWriter logWriter,
			MSBuildVerbosity verbosity)
		{
			MSBuildResult[] result = null;
			BuildEngine.RunSTA (delegate
			{
				try {
					var project = SetupProject (configurations);
					currentLogWriter = logWriter;

					var logger = new LocalLogger (file);
					engine.UnregisterAllLoggers ();
					engine.RegisterLogger (logger);
					engine.RegisterLogger (consoleLogger);

					consoleLogger.Verbosity = GetVerbosity (verbosity);
					
					project.Build (target);
					
					result = logger.BuildResult.ToArray ();
				} catch (Microsoft.Build.Exceptions.InvalidProjectFileException ex) {
						var r = new MSBuildResult (
							file, false, ex.ErrorSubcategory, ex.ErrorCode, ex.ProjectFile,
							ex.LineNumber, ex.ColumnNumber, ex.EndLineNumber, ex.EndColumnNumber,
							ex.BaseMessage, ex.HelpKeyword);
						logWriter.WriteLine (r.ToString ());
						result = new [] { r };
				} finally {
					currentLogWriter = null;
				}
			});
			return result;
		}
예제 #8
0
파일: Project.cs 프로젝트: simoneb/Pencil
        public void MSBuild4(string projectFile,
            IList<string> targets,
            Hashtable properties = null,
            int? maxCpuCount = null,
            bool? nodeReuse = null,
            bool showCommandLine = false,
            MSBuildToolsVersion? toolsVersion = null,
            MSBuildVerbosity? verbosity = null)
        {
            var task = new MSBuild40Task(FileSystem, Platform)
             {
                 ProjectFile = projectFile,
                 Targets = targets,
                 MaxCpuCount = maxCpuCount,
                 NodeReuse = nodeReuse,
                 ShowCommandLine = showCommandLine,
                 ToolsVersion = toolsVersion,
                 Verbosity = verbosity
             };

             foreach (var property in properties ?? new Dictionary<string, string>())
                 task.AddProperty(property.Key, property.Value);

             task.Run();
        }
예제 #9
0
		public MSBuildResult Run (
			ProjectConfigurationInfo[] configurations, ILogWriter logWriter, MSBuildVerbosity verbosity,
			string[] runTargets, string[] evaluateItems, string[] evaluateProperties)
		{
			MSBuildResult result = null;
			BuildEngine.RunSTA (delegate {
				try {
					var project = SetupProject (configurations);
					currentLogWriter = logWriter;

					buildEngine.Engine.UnregisterAllLoggers ();

					var logger = new LocalLogger (file);
					buildEngine.Engine.RegisterLogger (logger);
					if (logWriter != null) {
						buildEngine.Engine.RegisterLogger (consoleLogger);
						consoleLogger.Verbosity = GetVerbosity (verbosity);
					}

					if (runTargets != null && runTargets.Length > 0) {
						// We are using this BuildProject overload and the BuildSettings.None argument as a workaround to
						// an xbuild bug which causes references to not be resolved after the project has been built once.
						buildEngine.Engine.BuildProject (project, runTargets, new Hashtable (), BuildSettings.None);
					}

					result = new MSBuildResult (logger.BuildResult.ToArray ());

					if (evaluateProperties != null) {
						foreach (var name in evaluateProperties)
							result.Properties [name] = project.GetEvaluatedProperty (name);
					}

					if (evaluateItems != null) {
						foreach (var name in evaluateItems) {
							BuildItemGroup grp = project.GetEvaluatedItemsByName (name);
							var list = new List<MSBuildEvaluatedItem> ();
							foreach (BuildItem item in grp) {
								var evItem = new MSBuildEvaluatedItem (name, UnescapeString (item.FinalItemSpec));
								foreach (DictionaryEntry de in (IDictionary) evaluatedMetadataField.GetValue (item)) {
									evItem.Metadata [(string)de.Key] = UnescapeString ((string)de.Value);
								}
								list.Add (evItem);
							}
							result.Items[name] = list;
						}
					}
				} catch (InvalidProjectFileException ex) {
					var r = new MSBuildTargetResult (
						file, false, ex.ErrorSubcategory, ex.ErrorCode, ex.ProjectFile,
						ex.LineNumber, ex.ColumnNumber, ex.EndLineNumber, ex.EndColumnNumber,
						ex.BaseMessage, ex.HelpKeyword);
					logWriter.WriteLine (r.ToString ());
					result = new MSBuildResult (new [] { r });
				} finally {
					currentLogWriter = null;
				}
			});
			return result;
		}
		public MSBuildResult[] RunTarget (string target, ProjectConfigurationInfo[] configurations, ILogWriter logWriter,
			MSBuildVerbosity verbosity)
		{
			if (target == null)
				throw new ArgumentNullException ("target");

			return builder.RunTarget (target, configurations, logWriter, verbosity);
		}
예제 #11
0
		public MSBuildResult[] RunTarget (string target, ProjectConfigurationInfo[] configurations, ILogWriter logWriter,
			MSBuildVerbosity verbosity)
		{
			if (target == null)
				throw new ArgumentNullException ("target");

			return builder.RunTarget (target, configurations, logWriter, verbosity);
		}
예제 #12
0
 public MSBuildResult Run(
     ProjectConfigurationInfo[] configurations,
     ILogWriter logWriter,
     MSBuildVerbosity verbosity,
     string[] runTargets,
     string[] evaluateItems,
     string[] evaluateProperties)
 {
     return(builder.Run(configurations, logWriter, verbosity, runTargets, evaluateItems, evaluateProperties));
 }
예제 #13
0
		public MSBuildResult[] RunTarget (string target, string configuration, string platform, ILogWriter logWriter,
			MSBuildVerbosity verbosity)
		{
			if (target == null)
				throw new ArgumentNullException ("target");
			if (configuration == null)
				throw new ArgumentNullException ("configuration");
			
			return builder.RunTarget (target, configuration, platform, logWriter, verbosity);
		}
예제 #14
0
 public Task <MSBuildResult> Run(
     ProjectConfigurationInfo [] configurations,
     TextWriter logWriter,
     MSBuildLogger logger,
     MSBuildVerbosity verbosity,
     string [] runTargets,
     string [] evaluateItems,
     string [] evaluateProperties,
     Dictionary <string, string> globalProperties,
     CancellationToken cancellationToken
     )
 {
     return(builder.Run(configurations, logWriter, logger, verbosity, runTargets, evaluateItems, evaluateProperties, globalProperties, cancellationToken));
 }
예제 #15
0
        public MSBuildResult[] RunTarget(string target, string configuration, string platform, ILogWriter logWriter,
                                         MSBuildVerbosity verbosity)
        {
            if (target == null)
            {
                throw new ArgumentNullException("target");
            }
            if (configuration == null)
            {
                throw new ArgumentNullException("configuration");
            }

            return(builder.RunTarget(target, configuration, platform, logWriter, verbosity));
        }
예제 #16
0
		LoggerVerbosity GetVerbosity (MSBuildVerbosity verbosity)
		{
			switch (verbosity) {
			case MSBuildVerbosity.Quiet:
				return LoggerVerbosity.Quiet;
			case MSBuildVerbosity.Minimal:
				return LoggerVerbosity.Minimal;
			default:
				return LoggerVerbosity.Normal;
			case MSBuildVerbosity.Detailed:
				return LoggerVerbosity.Detailed;
			case MSBuildVerbosity.Diagnostic:
				return LoggerVerbosity.Diagnostic;
			}
		}
예제 #17
0
        void BeginBuildOperation(IEngineLogWriter logWriter, MSBuildVerbosity verbosity, ProjectConfigurationInfo [] configurations)
        {
            // Start a new MSBuild build session, sending log to the provided writter

            RunSTA(delegate {
                BuildOperationStarted = true;
                // This property specifies the mapping between the solution configuration
                // and the project configurations
                engine.SetGlobalProperty("CurrentSolutionConfigurationContents", ProjectBuilder.GenerateSolutionConfigurationContents(configurations));
                BuildParameters parameters = new BuildParameters(engine);
                sessionLogWriter           = logWriter;
                loggerAdapter      = new MSBuildLoggerAdapter(logWriter, verbosity);
                parameters.Loggers = loggerAdapter.Loggers;
                BuildManager.DefaultBuildManager.BeginBuild(parameters);
            });
        }
예제 #18
0
        public Task <MSBuildResult> Run(
            ProjectConfigurationInfo[] configurations,
            ILogWriter logWriter,
            MSBuildVerbosity verbosity,
            string[] runTargets,
            string[] evaluateItems,
            string[] evaluateProperties,
            Dictionary <string, string> globalProperties,
            CancellationToken cancellationToken
            )
        {
            // Get an id for the task, and get ready to cancel it if the cancellation token is signalled
            var taskId = Interlocked.Increment(ref lastTaskId);
            var cr     = RegisterCancellation(cancellationToken, taskId);

            var t = Task.Run(() => {
                try {
                    BeginOperation();
                    var res = builder.Run(configurations, logWriter, verbosity, runTargets, evaluateItems, evaluateProperties, globalProperties, taskId);
                    if (res == null && cancellationToken.IsCancellationRequested)
                    {
                        MSBuildTargetResult err = new MSBuildTargetResult(file, false, "", "", file, 1, 1, 1, 1, "Build cancelled", "");
                        return(new MSBuildResult(new [] { err }));
                    }
                    if (res == null)
                    {
                        throw new Exception("Unknown failure");
                    }
                    return(res);
                } catch (Exception ex) {
                    CheckDisconnected();
                    LoggingService.LogError("RunTarget failed", ex);
                    MSBuildTargetResult err = new MSBuildTargetResult(file, false, "", "", file, 1, 1, 1, 1, "Unknown MSBuild failure. Please try building the project again", "");
                    MSBuildResult res       = new MSBuildResult(new [] { err });
                    return(res);
                } finally {
                    EndOperation();
                }
            });

            // Dispose the cancel registration
            t.ContinueWith(r => cr.Dispose());

            return(t);
        }
예제 #19
0
        public async Task <MSBuildResult> Run(
            ProjectConfigurationInfo[] configurations,
            TextWriter logWriter,
            MSBuildLogger logger,
            MSBuildVerbosity verbosity,
            string binLogFilePath,
            string[] runTargets,
            string[] evaluateItems,
            string[] evaluateProperties,
            Dictionary <string, string> globalProperties,
            CancellationToken cancellationToken
            )
        {
            // Get an id for the task, and get ready to cancel it if the cancellation token is signalled
            var taskId   = Interlocked.Increment(ref lastTaskId);
            var cr       = RegisterCancellation(cancellationToken, taskId);
            var loggerId = engine.RegisterLogger(logWriter, logger);

            try {
                BeginOperation();
                var res = await SendRun(configurations, loggerId, logger.EnabledEvents, verbosity, binLogFilePath, runTargets, evaluateItems, evaluateProperties, globalProperties, taskId).ConfigureAwait(false);

                if (res == null && cancellationToken.IsCancellationRequested)
                {
                    MSBuildTargetResult err = new MSBuildTargetResult(file, false, "", "", file, 1, 1, 1, 1, "Build cancelled", "");
                    return(new MSBuildResult(new [] { err }));
                }
                if (res == null)
                {
                    throw new Exception("Unknown failure");
                }
                return(res);
            } catch (Exception ex) {
                await CheckDisconnected().ConfigureAwait(false);

                LoggingService.LogError("RunTarget failed", ex);
                MSBuildTargetResult err = new MSBuildTargetResult(file, false, "", "", file, 1, 1, 1, 1, "Unknown MSBuild failure. Please try building the project again", "");
                MSBuildResult       res = new MSBuildResult(new [] { err });
                return(res);
            } finally {
                engine.UnregisterLogger(loggerId);
                EndOperation();
                cr.Dispose();
            }
        }
예제 #20
0
 public MSBuildResult Run(
     ProjectConfigurationInfo[] configurations,
     ILogWriter logWriter,
     MSBuildVerbosity verbosity,
     string[] runTargets,
     string[] evaluateItems,
     string[] evaluateProperties)
 {
     try {
         return(builder.Run(configurations, logWriter, verbosity, runTargets, evaluateItems, evaluateProperties));
     } catch (Exception ex) {
         CheckDisconnected();
         LoggingService.LogError("RunTarget failed", ex);
         MSBuildTargetResult err = new MSBuildTargetResult(file, false, "", "", file, 1, 1, 1, 1, "Unknown MSBuild failure. Please try building the project again", "");
         MSBuildResult       res = new MSBuildResult(new [] { err });
         return(res);
     }
 }
예제 #21
0
		public MSBuildResult[] RunTarget (string target, string configuration, string platform, ILogWriter logWriter,
			MSBuildVerbosity verbosity)
		{
			try {
				SetupEngine (configuration, platform);
				currentLogWriter = logWriter;
				
				LocalLogger logger = new LocalLogger (Path.GetDirectoryName (file));
				engine.RegisterLogger (logger);
				
				consoleLogger.Verbosity = GetVerbosity (verbosity);
				project.Build (target);
				return logger.BuildResult.ToArray ();
				
			} finally {
				currentLogWriter = null;
			}
		}
예제 #22
0
        LoggerVerbosity GetVerbosity(MSBuildVerbosity verbosity)
        {
            switch (verbosity)
            {
            case MSBuildVerbosity.Quiet:
                return(LoggerVerbosity.Quiet);

            case MSBuildVerbosity.Minimal:
                return(LoggerVerbosity.Minimal);

            default:
                return(LoggerVerbosity.Normal);

            case MSBuildVerbosity.Detailed:
                return(LoggerVerbosity.Detailed);

            case MSBuildVerbosity.Diagnostic:
                return(LoggerVerbosity.Diagnostic);
            }
        }
        static string GetVerbosityArgument(MSBuildVerbosity verbosity)
        {
            switch (verbosity)
            {
            case MSBuildVerbosity.Detailed:
                return(" /v:d");

            case MSBuildVerbosity.Diagnostic:
                return(" /v:diag");

            case MSBuildVerbosity.Minimal:
                return(" /v:m");

            case MSBuildVerbosity.Quiet:
                return(" /v:q");

            default:                     // Normal
                return(" /v:n");
            }
        }
예제 #24
0
        public MSBuildLoggerAdapter(IEngineLogWriter logWriter, MSBuildVerbosity verbosity) : base(logWriter)
        {
            // LocalLogger will be used to collect build result information.
            // ConsoleLogger is used for the regular build output
            // TargetLogger collects and fordwards build events requested by the client

            var logger = new LocalLogger()
            {
                Adapter = this
            };

            if (logWriter != null)
            {
                var consoleLogger = new ConsoleLogger(ProjectBuilder.GetVerbosity(verbosity), LogWrite, null, null);
                eventsLogger = new TargetLogger(logWriter.RequiredEvents, LogEvent);
                loggers      = new ILogger [] { logger, consoleLogger, eventsLogger };
            }
            else
            {
                loggers = new ILogger [] { logger };
            }
        }
예제 #25
0
		public MSBuildResult Run (
			ProjectConfigurationInfo[] configurations,
			ILogWriter logWriter,
			MSBuildVerbosity verbosity,
			string[] runTargets,
			string[] evaluateItems,
			string[] evaluateProperties)
		{
			try {
				return builder.Run (configurations, logWriter, verbosity, runTargets, evaluateItems, evaluateProperties);
			} catch (Exception ex) {
				CheckDisconnected ();
				LoggingService.LogError ("RunTarget failed", ex);
				MSBuildTargetResult err = new MSBuildTargetResult (file, false, "", "", file, 1, 1, 1, 1, "Unknown MSBuild failure. Please try building the project again", "");
				MSBuildResult res = new MSBuildResult (new [] { err });
				return res;
			}
		}
예제 #26
0
		public Task<MSBuildResult> Run (
			ProjectConfigurationInfo[] configurations,
			ILogWriter logWriter,
			MSBuildVerbosity verbosity,
			string[] runTargets,
			string[] evaluateItems,
			string[] evaluateProperties,
			Dictionary<string, string> globalProperties,
			CancellationToken cancellationToken
		)
		{
			// Get an id for the task, and get ready to cancel it if the cancellation token is signalled
			var taskId = Interlocked.Increment (ref lastTaskId);
			var cr = RegisterCancellation (cancellationToken, taskId);

			var t = Task.Run (() => {
				try {
					BeginOperation ();
					var res = builder.Run (configurations, logWriter, verbosity, runTargets, evaluateItems, evaluateProperties, globalProperties, taskId);
					if (res == null && cancellationToken.IsCancellationRequested) {
						MSBuildTargetResult err = new MSBuildTargetResult (file, false, "", "", file, 1, 1, 1, 1, "Build cancelled", "");
						return new MSBuildResult (new [] { err });
					}
					if (res == null)
						throw new Exception ("Unknown failure");
					return res;
				} catch (Exception ex) {
					CheckDisconnected ();
					LoggingService.LogError ("RunTarget failed", ex);
					MSBuildTargetResult err = new MSBuildTargetResult (file, false, "", "", file, 1, 1, 1, 1, "Unknown MSBuild failure. Please try building the project again", "");
					MSBuildResult res = new MSBuildResult (new [] { err });
					return res;
				} finally {
					EndOperation ();
				}
			});

			// Dispose the cancel registration
			t.ContinueWith (r => cr.Dispose ());

			return t;
		}
예제 #27
0
        /// <summary>
        /// Indicates that a build session is starting
        /// </summary>
        public async Task BeginBuildOperation(TextWriter logWriter, MSBuildLogger logger, MSBuildVerbosity verbosity, ProjectConfigurationInfo[] configurations)
        {
            buildSessionLoggerId = RegisterLogger(logWriter, logger);
            try {
                await connection.SendMessage(new BeginBuildRequest {
                    LogWriterId      = buildSessionLoggerId,
                    EnabledLogEvents = logger != null ? logger.EnabledEvents : MSBuildEvent.None,
                    Verbosity        = verbosity,
                    Configurations   = configurations
                });
            } catch {
                UnregisterLogger(buildSessionLoggerId);
                await CheckDisconnected();

                throw;
            }
        }
예제 #28
0
 /// <summary>
 /// Starts a build session that can span multiple builders and projects
 /// </summary>
 /// <returns>The build session handle.</returns>
 /// <param name="tw">Log writter</param>
 /// <param name="verbosity">MSBuild verbosity.</param>
 internal static object StartBuildSession(TextWriter tw, MSBuildLogger logger, MSBuildVerbosity verbosity, ProjectConfigurationInfo[] configurations)
 {
     return(new SessionInfo {
         Writer = tw,
         Verbosity = verbosity,
         Logger = logger,
         Configurations = configurations
     });
 }
예제 #29
0
        public MSBuildResult Run(
            ProjectConfigurationInfo[] configurations, ILogWriter logWriter, MSBuildVerbosity verbosity,
            string[] runTargets, string[] evaluateItems, string[] evaluateProperties)
        {
            if (runTargets == null || runTargets.Length == 0)
            {
                throw new ArgumentException("runTargets is empty");
            }

            MSBuildResult result = null;

            BuildEngine.RunSTA(delegate {
                try {
                    var project      = SetupProject(configurations);
                    currentLogWriter = logWriter;

                    ILogger[] loggers;
                    var logger = new LocalLogger(file);
                    if (logWriter != null)
                    {
                        consoleLogger.Verbosity = GetVerbosity(verbosity);
                        loggers = new ILogger[] { logger, consoleLogger };
                    }
                    else
                    {
                        loggers = new ILogger[] { logger };
                    }

                    //building the project will create items and alter properties, so we use a new instance
                    var pi = project.CreateProjectInstance();

                    pi.Build(runTargets, loggers);

                    result = new MSBuildResult(logger.BuildResult.ToArray());

                    if (evaluateProperties != null)
                    {
                        foreach (var name in evaluateProperties)
                        {
                            var prop = pi.GetProperty(name);
                            result.Properties [name] = prop != null? prop.EvaluatedValue : null;
                        }
                    }

                    if (evaluateItems != null)
                    {
                        foreach (var name in evaluateItems)
                        {
                            var grp  = pi.GetItems(name);
                            var list = new List <MSBuildEvaluatedItem> ();
                            foreach (var item in grp)
                            {
                                var evItem = new MSBuildEvaluatedItem(name, UnescapeString(item.EvaluatedInclude));
                                foreach (var m in item.Metadata)
                                {
                                    evItem.Metadata [m.Name] = UnescapeString(m.EvaluatedValue);
                                }
                                list.Add(evItem);
                            }
                            result.Items[name] = list;
                        }
                    }
                } catch (Microsoft.Build.Exceptions.InvalidProjectFileException ex) {
                    var r = new MSBuildTargetResult(
                        file, false, ex.ErrorSubcategory, ex.ErrorCode, ex.ProjectFile,
                        ex.LineNumber, ex.ColumnNumber, ex.EndLineNumber, ex.EndColumnNumber,
                        ex.BaseMessage, ex.HelpKeyword);
                    logWriter.WriteLine(r.ToString());
                    result = new MSBuildResult(new [] { r });
                } finally {
                    currentLogWriter = null;
                }
            });
            return(result);
        }
 /// <summary>
 /// Starts a build session that can span multiple builders and projects
 /// </summary>
 /// <returns>The build session handle.</returns>
 /// <param name="monitor">Progress monitor.</param>
 /// <param name="verbosity">MSBuild verbosity.</param>
 internal static object StartBuildSession(ProgressMonitor monitor, MSBuildLogger logger, MSBuildVerbosity verbosity, ProjectConfigurationInfo[] configurations)
 {
     CheckShutDown();
     return(new SessionInfo {
         Monitor = monitor,
         Verbosity = verbosity,
         Logger = logger,
         Configurations = configurations
     });
 }
예제 #31
0
		public MSBuildResult[] RunTarget (string target, string configuration, string platform, ILogWriter logWriter,
			MSBuildVerbosity verbosity)
		{
			return builder.RunTarget (target, configuration, platform, logWriter, verbosity);
		}
예제 #32
0
        public MSBuildResult Run(
            ProjectConfigurationInfo[] configurations, IEngineLogWriter logWriter, MSBuildVerbosity verbosity,
            string[] runTargets, string[] evaluateItems, string[] evaluateProperties, Dictionary <string, string> globalProperties, int taskId)
        {
            if (runTargets == null || runTargets.Length == 0)
            {
                throw new ArgumentException("runTargets is empty");
            }

            MSBuildResult result = null;

            BuildEngine.RunSTA(taskId, delegate {
                Project project = null;
                Dictionary <string, string> originalGlobalProperties = null;
                try {
                    if (sdksPath != null)
                    {
                        Environment.SetEnvironmentVariable("MSBuildSDKsPath", sdksPath);
                    }
                    project = SetupProject(configurations);
                    InitLogger(logWriter);

                    ILogger[] loggers;
                    var logger = new LocalLogger(file);
                    if (logWriter != null)
                    {
                        var consoleLogger = new ConsoleLogger(GetVerbosity(verbosity), LogWrite, null, null);
                        var eventLogger   = new TargetLogger(logWriter.RequiredEvents, LogEvent);
                        loggers           = new ILogger[] { logger, consoleLogger, eventLogger };
                    }
                    else
                    {
                        loggers = new ILogger[] { logger };
                    }

                    if (globalProperties != null || sdksPath != null)
                    {
                        originalGlobalProperties = new Dictionary <string, string> ();
                        foreach (var p in project.GlobalProperties)
                        {
                            originalGlobalProperties [p.Key] = p.Value;
                        }
                        if (globalProperties != null)
                        {
                            foreach (var p in globalProperties)
                            {
                                project.SetGlobalProperty(p.Key, p.Value);
                            }
                        }
                        if (sdksPath != null)
                        {
                            project.SetGlobalProperty("MSBuildSDKsPath", sdksPath);
                        }
                        project.ReevaluateIfNecessary();
                    }

                    //building the project will create items and alter properties, so we use a new instance
                    var pi = project.CreateProjectInstance();

                    pi.Build(runTargets, loggers);

                    result = new MSBuildResult(logger.BuildResult.ToArray());

                    if (evaluateProperties != null)
                    {
                        foreach (var name in evaluateProperties)
                        {
                            var prop = pi.GetProperty(name);
                            result.Properties [name] = prop != null? prop.EvaluatedValue : null;
                        }
                    }

                    if (evaluateItems != null)
                    {
                        foreach (var name in evaluateItems)
                        {
                            var grp  = pi.GetItems(name);
                            var list = new List <MSBuildEvaluatedItem> ();
                            foreach (var item in grp)
                            {
                                var evItem = new MSBuildEvaluatedItem(name, UnescapeString(item.EvaluatedInclude));
                                foreach (var m in item.Metadata)
                                {
                                    evItem.Metadata [m.Name] = UnescapeString(m.EvaluatedValue);
                                }
                                list.Add(evItem);
                            }
                            result.Items[name] = list.ToArray();
                        }
                    }
                } catch (Microsoft.Build.Exceptions.InvalidProjectFileException ex) {
                    var r = new MSBuildTargetResult(
                        file, false, ex.ErrorSubcategory, ex.ErrorCode, ex.ProjectFile,
                        ex.LineNumber, ex.ColumnNumber, ex.EndLineNumber, ex.EndColumnNumber,
                        ex.BaseMessage, ex.HelpKeyword);
                    LogWriteLine(r.ToString());
                    result = new MSBuildResult(new [] { r });
                } finally {
                    DisposeLogger();
                    if (project != null && globalProperties != null)
                    {
                        foreach (var p in globalProperties)
                        {
                            project.RemoveGlobalProperty(p.Key);
                        }
                        foreach (var p in originalGlobalProperties)
                        {
                            project.SetGlobalProperty(p.Key, p.Value);
                        }
                        project.ReevaluateIfNecessary();
                    }
                }
            });
            return(result);
        }
예제 #33
0
        /// <summary>
        /// Indicates that a build session is starting
        /// </summary>
        public async Task BeginBuildOperation(ProgressMonitor monitor, MSBuildLogger logger, MSBuildVerbosity verbosity, ProjectConfigurationInfo[] configurations)
        {
            buildSessionLoggerId = RegisterLogger(monitor.Log, logger);
            try {
                var binLogPath = Path.ChangeExtension(Path.GetTempFileName(), "binlog");
                await connection.SendMessage(new BeginBuildRequest {
                    BinLogFilePath   = binLogPath,
                    LogWriterId      = buildSessionLoggerId,
                    EnabledLogEvents = logger != null ? logger.EnabledEvents : MSBuildEvent.None,
                    Verbosity        = verbosity,
                    Configurations   = configurations
                });

                monitor.LogObject(new BuildSessionStartedEvent {
                    SessionId = buildSessionLoggerId,
                    LogFile   = binLogPath,
                    TimeStamp = DateTime.Now
                });
            } catch {
                UnregisterLogger(buildSessionLoggerId);
                await CheckDisconnected();

                throw;
            }
        }
예제 #34
0
 public MSBuildResult[] RunTarget(string target, string configuration, string platform, ILogWriter logWriter,
                                  MSBuildVerbosity verbosity)
 {
     return(builder.RunTarget(target, configuration, platform, logWriter, verbosity));
 }
예제 #35
0
		public MSBuildResult[] RunTarget (string target, string configuration, string platform, ILogWriter logWriter,
			MSBuildVerbosity verbosity)
		{
			MSBuildResult[] result = null;
			RunSTA (delegate
			{
				try {
					SetupProject (configuration, platform);
					currentLogWriter = logWriter;

					LocalLogger logger = new LocalLogger (Path.GetDirectoryName (file));
					engine.RegisterLogger (logger);

					consoleLogger.Verbosity = GetVerbosity (verbosity);
					
					// We are using this BuildProject overload and the BuildSettings.None argument as a workaround to
					// an xbuild bug which causes references to not be resolved after the project has been built once.
					engine.BuildProject (project, new string[] { target }, new Hashtable (), BuildSettings.None);
					
					result = logger.BuildResult.ToArray ();
				} catch (InvalidProjectFileException ex) {
					result = new MSBuildResult[] { new MSBuildResult (false, ex.ProjectFile ?? file, ex.LineNumber, ex.ColumnNumber, ex.ErrorCode, ex.Message) };
				} finally {
					currentLogWriter = null;
				}
			});
			return result;
		}
예제 #36
0
        public MSBuildResult Run(
            ProjectConfigurationInfo[] configurations, IEngineLogWriter logWriter, MSBuildVerbosity verbosity,
            string[] runTargets, string[] evaluateItems, string[] evaluateProperties, Dictionary <string, string> globalProperties, int taskId)
        {
            if (runTargets == null || runTargets.Length == 0)
            {
                throw new ArgumentException("runTargets is empty");
            }

            MSBuildResult result = null;

            BuildEngine.RunSTA(taskId, delegate {
                Project project = null;
                Dictionary <string, string> originalGlobalProperties = null;

                MSBuildLoggerAdapter loggerAdapter;

                if (buildEngine.BuildOperationStarted)
                {
                    loggerAdapter = buildEngine.StartProjectSessionBuild(logWriter);
                }
                else
                {
                    loggerAdapter = new MSBuildLoggerAdapter(logWriter, verbosity);
                }

                try {
                    project = SetupProject(configurations);

                    if (globalProperties != null)
                    {
                        originalGlobalProperties = new Dictionary <string, string> ();
                        foreach (var p in project.GlobalProperties)
                        {
                            originalGlobalProperties [p.Key] = p.Value;
                        }
                        if (globalProperties != null)
                        {
                            foreach (var p in globalProperties)
                            {
                                project.SetGlobalProperty(p.Key, p.Value);
                            }
                        }
                        project.ReevaluateIfNecessary();
                    }

                    // Building the project will create items and alter properties, so we use a new instance
                    var pi = project.CreateProjectInstance();

                    Build(pi, runTargets, loggerAdapter.Loggers);

                    result = new MSBuildResult(loggerAdapter.BuildResult.ToArray());

                    if (evaluateProperties != null)
                    {
                        foreach (var name in evaluateProperties)
                        {
                            var prop = pi.GetProperty(name);
                            result.Properties [name] = prop != null? prop.EvaluatedValue : null;
                        }
                    }

                    if (evaluateItems != null)
                    {
                        foreach (var name in evaluateItems)
                        {
                            var grp  = pi.GetItems(name);
                            var list = new List <MSBuildEvaluatedItem> ();
                            foreach (var item in grp)
                            {
                                var evItem = new MSBuildEvaluatedItem(name, UnescapeString(item.EvaluatedInclude));
                                foreach (var metadataName in item.MetadataNames)
                                {
                                    evItem.Metadata [metadataName] = UnescapeString(item.GetMetadataValue(metadataName));
                                }
                                list.Add(evItem);
                            }
                            result.Items[name] = list.ToArray();
                        }
                    }
                } catch (Microsoft.Build.Exceptions.InvalidProjectFileException ex) {
                    var r = new MSBuildTargetResult(
                        file, false, ex.ErrorSubcategory, ex.ErrorCode, ex.ProjectFile,
                        ex.LineNumber, ex.ColumnNumber, ex.EndLineNumber, ex.EndColumnNumber,
                        ex.BaseMessage, ex.HelpKeyword);
                    loggerAdapter.LogWriteLine(r.ToString());
                    result = new MSBuildResult(new [] { r });
                } finally {
                    if (buildEngine.BuildOperationStarted)
                    {
                        buildEngine.EndProjectSessionBuild();
                    }
                    else
                    {
                        loggerAdapter.Dispose();
                    }

                    if (project != null && globalProperties != null)
                    {
                        foreach (var p in globalProperties)
                        {
                            project.RemoveGlobalProperty(p.Key);
                        }
                        foreach (var p in originalGlobalProperties)
                        {
                            project.SetGlobalProperty(p.Key, p.Value);
                        }
                        project.ReevaluateIfNecessary();
                    }
                }
            });
            return(result);
        }
예제 #37
0
		public MSBuildResult Run (
			ProjectConfigurationInfo[] configurations, ILogWriter logWriter, MSBuildVerbosity verbosity,
			string[] runTargets, string[] evaluateItems, string[] evaluateProperties, Dictionary<string,string> globalProperties)
		{
			if (runTargets == null || runTargets.Length == 0)
				throw new ArgumentException ("runTargets is empty");

			MSBuildResult result = null;
			BuildEngine.RunSTA (delegate {
				try {
					var project = SetupProject (configurations);
					currentLogWriter = logWriter;

					ILogger[] loggers;
					var logger = new LocalLogger (file);
					if (logWriter != null) {
						var consoleLogger = new ConsoleLogger (GetVerbosity (verbosity), LogWriteLine, null, null);
						loggers = new ILogger[] { logger, consoleLogger };
					} else {
						loggers = new ILogger[] { logger };
					}

					//building the project will create items and alter properties, so we use a new instance
					var pi = project.CreateProjectInstance ();

					if (globalProperties != null)
						foreach (var p in globalProperties)
							pi.SetProperty (p.Key, p.Value);

					pi.Build (runTargets, loggers);

					result = new MSBuildResult (logger.BuildResult.ToArray ());

					if (evaluateProperties != null) {
						foreach (var name in evaluateProperties) {
							var prop = pi.GetProperty (name);
							result.Properties [name] = prop != null? prop.EvaluatedValue : null;
						}
					}

					if (evaluateItems != null) {
						foreach (var name in evaluateItems) {
							var grp = pi.GetItems (name);
							var list = new List<MSBuildEvaluatedItem> ();
							foreach (var item in grp) {
								var evItem = new MSBuildEvaluatedItem (name, UnescapeString (item.EvaluatedInclude));
								foreach (var m in item.Metadata) {
									evItem.Metadata [m.Name] = UnescapeString (m.EvaluatedValue);
								}
								list.Add (evItem);
							}
							result.Items[name] = list;
						}
					}
				} catch (Microsoft.Build.Exceptions.InvalidProjectFileException ex) {
					var r = new MSBuildTargetResult (
						file, false, ex.ErrorSubcategory, ex.ErrorCode, ex.ProjectFile,
						ex.LineNumber, ex.ColumnNumber, ex.EndLineNumber, ex.EndColumnNumber,
						ex.BaseMessage, ex.HelpKeyword);
					if (logWriter != null)
						logWriter.WriteLine (r.ToString ());
					result = new MSBuildResult (new [] { r });
				} finally {
					currentLogWriter = null;
				}
			});
			return result;
		}
예제 #38
0
        async Task <MSBuildResult> SendRun(ProjectConfigurationInfo [] configurations, int loggerId, MSBuildEvent enabledLogEvents, MSBuildVerbosity verbosity, string [] runTargets, string [] evaluateItems, string [] evaluateProperties, Dictionary <string, string> globalProperties, int taskId)
        {
            var msg = new RunProjectRequest {
                ProjectId          = projectId,
                Configurations     = configurations,
                LogWriterId        = loggerId,
                EnabledLogEvents   = enabledLogEvents,
                Verbosity          = verbosity,
                RunTargets         = runTargets,
                EvaluateItems      = evaluateItems,
                EvaluateProperties = evaluateProperties,
                GlobalProperties   = globalProperties,
                TaskId             = taskId
            };

            var res = await connection.SendMessage(msg);

            // Make sure we get all log messages
            await connection.ProcessPendingMessages();

            return(res.Result);
        }
예제 #39
0
 void BeginBuildOperation(IEngineLogWriter logWriter, MSBuildVerbosity verbosity, ProjectConfigurationInfo [] configurations)
 {
 }
예제 #40
0
        public MSBuildResult Run(
            ProjectConfigurationInfo[] configurations, IEngineLogWriter logWriter, MSBuildVerbosity verbosity,
            string[] runTargets, string[] evaluateItems, string[] evaluateProperties, Dictionary <string, string> globalProperties, int taskId)
        {
            MSBuildResult result = null;

            BuildEngine.RunSTA(taskId, delegate {
                try {
                    var project = SetupProject(configurations);
                    InitLogger(logWriter);

                    buildEngine.Engine.UnregisterAllLoggers();

                    var logger = new LocalLogger(file);
                    buildEngine.Engine.RegisterLogger(logger);
                    if (logWriter != null)
                    {
                        buildEngine.Engine.RegisterLogger(consoleLogger);
                        consoleLogger.Verbosity = GetVerbosity(verbosity);
                        buildEngine.Engine.RegisterLogger(new TargetLogger(logWriter.RequiredEvents, LogEvent));
                    }

                    if (runTargets != null && runTargets.Length > 0)
                    {
                        if (globalProperties != null)
                        {
                            foreach (var p in globalProperties)
                            {
                                project.GlobalProperties.SetProperty(p.Key, p.Value);
                            }
                        }

                        // We are using this BuildProject overload and the BuildSettings.None argument as a workaround to
                        // an xbuild bug which causes references to not be resolved after the project has been built once.
                        buildEngine.Engine.BuildProject(project, runTargets, new Hashtable(), BuildSettings.None);

                        if (globalProperties != null)
                        {
                            foreach (var p in globalProperties.Keys)
                            {
                                project.GlobalProperties.RemoveProperty(p);
                                buildEngine.Engine.GlobalProperties.RemoveProperty(p);
                            }
                        }
                    }

                    result = new MSBuildResult(logger.BuildResult.ToArray());

                    if (evaluateProperties != null)
                    {
                        foreach (var name in evaluateProperties)
                        {
                            result.Properties [name] = project.GetEvaluatedProperty(name);
                        }
                    }

                    if (evaluateItems != null)
                    {
                        foreach (var name in evaluateItems)
                        {
                            BuildItemGroup grp = project.GetEvaluatedItemsByName(name);
                            var list           = new List <MSBuildEvaluatedItem> ();
                            foreach (BuildItem item in grp)
                            {
                                var evItem = new MSBuildEvaluatedItem(name, UnescapeString(item.FinalItemSpec));
                                foreach (DictionaryEntry de in (IDictionary)evaluatedMetadataField.GetValue(item))
                                {
                                    evItem.Metadata [(string)de.Key] = UnescapeString((string)de.Value);
                                }
                                list.Add(evItem);
                            }
                            result.Items[name] = list.ToArray();
                        }
                    }
                } catch (InvalidProjectFileException ex) {
                    var r = new MSBuildTargetResult(
                        file, false, ex.ErrorSubcategory, ex.ErrorCode, ex.ProjectFile,
                        ex.LineNumber, ex.ColumnNumber, ex.EndLineNumber, ex.EndColumnNumber,
                        ex.BaseMessage, ex.HelpKeyword);
                    LogWriteLine(r.ToString());
                    result = new MSBuildResult(new [] { r });
                } finally {
                    DisposeLogger();
                }
            });
            return(result);
        }
예제 #41
0
		public MSBuildResult Run (
			ProjectConfigurationInfo[] configurations,
			ILogWriter logWriter,
			MSBuildVerbosity verbosity,
			string[] runTargets,
			string[] evaluateItems,
			string[] evaluateProperties)
		{
			return builder.Run (configurations, logWriter, verbosity, runTargets, evaluateItems, evaluateProperties);
		}
 /// <summary>
 /// Adding a verbosity parameter to the end overrides any existing verbosity parameters.
 /// </summary>
 public static string AddVerbosity(string arguments, MSBuildVerbosity verbosity)
 {
     return(arguments + GetVerbosityArgument(verbosity));
 }