private Microsoft.Build.Execution.BuildResult BuildWithManagedApi(ILogger logger, string projectFilePath) { var consoleLogger = new MsBuildConsoleLogger(logger); var globalProperties = new Dictionary <string, string>(); var buildRequest = new BuildRequestData(projectFilePath, globalProperties, null, new[] { "Build" }, null); var buildParameters = new BuildParameters(new ProjectCollection()) { DetailedSummary = false, Loggers = new Microsoft.Build.Framework.ILogger[] { consoleLogger } }; return(BuildManager.DefaultBuildManager.Build(buildParameters, buildRequest)); }
public BuildResult Build(GenerateResult generateResult, ILogger logger) { lock (buildLock) { var projectFileName = Path.Combine(generateResult.DirectoryPath, ClassicGenerator.MainClassName + ".csproj"); var exeFileName = Path.Combine(generateResult.DirectoryPath, ClassicGenerator.MainClassName + ".exe"); var consoleLogger = new MsBuildConsoleLogger(logger); var globalProperties = new Dictionary <string, string>(); var buildRequest = new BuildRequestData(projectFileName, globalProperties, null, new[] { "Build" }, null); var buildParameters = new BuildParameters(new ProjectCollection()) { DetailedSummary = false, Loggers = new Microsoft.Build.Framework.ILogger[] { consoleLogger } }; var buildResult = BuildManager.DefaultBuildManager.Build(buildParameters, buildRequest); if (buildResult.OverallResult != BuildResultCode.Success && !File.Exists(exeFileName)) { logger.WriteLineInfo("BuildManager.DefaultBuildManager can't build this project. =("); logger.WriteLineInfo("Let's try to build it via BuildBenchmark.bat!"); var buildProcess = new Process { StartInfo = { FileName = Path.Combine(generateResult.DirectoryPath, "BuildBenchmark.bat"), WorkingDirectory = generateResult.DirectoryPath, UseShellExecute = false, RedirectStandardOutput = false, } }; buildProcess.Start(); buildProcess.WaitForExit(); if (File.Exists(exeFileName)) { return(new BuildResult(generateResult, true, null)); } } return(new BuildResult(generateResult, buildResult.OverallResult == BuildResultCode.Success, buildResult.Exception)); } }