public ProjectBuilder(BuildEngine buildEngine, string file) { if (file == null) { throw new ArgumentNullException("file"); } this.file = file; this.buildEngine = buildEngine; consoleLogger = new MDConsoleLogger(LoggerVerbosity.Normal, LogWriteLine, null, null); }
public ProjectBuilder(BuildEngine buildEngine, string file) { this.file = file; this.buildEngine = buildEngine; consoleLogger = new MDConsoleLogger(LoggerVerbosity.Normal, LogWriteLine, null, null); }
public MSBuildResult Run( ProjectConfigurationInfo[] configurations, IEngineLogWriter logWriter, MSBuildVerbosity verbosity, string[] runTargets, string[] evaluateItems, string[] evaluateProperties, Dictionary <string, string> globalProperties, int taskId) { MSBuildResult result = null; var loggerAdapter = new LoggerAdapter(logWriter); consoleLogger = new MDConsoleLogger(LoggerVerbosity.Normal, loggerAdapter.LogWriteLine, null, null); BuildEngine.RunSTA(taskId, delegate { try { var project = SetupProject(configurations); 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, loggerAdapter.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); loggerAdapter.LogWriteLine(r.ToString()); result = new MSBuildResult(new [] { r }); } finally { loggerAdapter.Dispose(); } }); return(result); }