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);
}