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); }
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; 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); }
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); }); }
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; }
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; }
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(); }
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); }
public MSBuildResult Run( ProjectConfigurationInfo[] configurations, ILogWriter logWriter, MSBuildVerbosity verbosity, string[] runTargets, string[] evaluateItems, string[] evaluateProperties) { return(builder.Run(configurations, logWriter, verbosity, runTargets, evaluateItems, evaluateProperties)); }
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); }
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)); }
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)); }
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; } }
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); }); }
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); }
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(); } }
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); } }
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; } }
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"); } }
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 }; } }
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; } }
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; }
/// <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; } }
/// <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 }); }
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 }); }
public MSBuildResult[] RunTarget (string target, string configuration, string platform, ILogWriter logWriter, MSBuildVerbosity verbosity) { return builder.RunTarget (target, configuration, platform, logWriter, verbosity); }
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); }
/// <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; } }
public MSBuildResult[] RunTarget(string target, string configuration, string platform, ILogWriter logWriter, MSBuildVerbosity verbosity) { return(builder.RunTarget(target, configuration, platform, logWriter, verbosity)); }
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; }
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); }
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; }
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); }
void BeginBuildOperation(IEngineLogWriter logWriter, MSBuildVerbosity verbosity, ProjectConfigurationInfo [] configurations) { }
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); }
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)); }