public override bool Execute() { if (!File.Exists(TargetFile)) { return(false); } MsBuildLogger log = new MsBuildLogger(Log); ILGenerator generator = new ILGenerator(log, WriteSymbols); return(generator.ProcessFile(TargetFile)); }
public static List <ITaskItem> GetReferences(this TestProject project) { if (project == null) { throw new ArgumentNullException(nameof(project)); } var target = "ResolveReferences"; var projectProperties = new Dictionary <string, string> { { "Configuration", project.Solution.Configuration }, { "Platform", project.Solution.Platform } }; var result = new List <ITaskItem>(); var projectToCompile = project.Path; var msBuildLogger = new MsBuildLogger { Verbosity = LoggerVerbosity.Normal }; var pc = new ProjectCollection(); var buildParameters = new BuildParameters(pc) { Loggers = new[] { msBuildLogger } }; var projectInstance = new ProjectInstance(projectToCompile, projectProperties, "14.0"); var buildResults = BuildManager.DefaultBuildManager.Build(buildParameters, new BuildRequestData(projectInstance, new[] { target }, null, BuildRequestDataFlags.ProvideProjectStateAfterBuild)); TargetResult buildResult; if (!buildResults.ResultsByTarget.TryGetValue(target, out buildResult) || buildResult.ResultCode != TargetResultCode.Success) { var builder = new StringBuilder(); builder.AppendLine($"Project {projectToCompile} compilation failed."); foreach (var targetResult in buildResults.ResultsByTarget) { builder.AppendLine($"- Target: {targetResult.Key}, Code: ({targetResult.Value.ResultCode})"); builder.AppendLine(msBuildLogger.GetLog()); } Assert.Fail(builder.ToString()); } result.AddRange(buildResults.ProjectStateAfterBuild.GetItems("ReferencePath").Select(i => new TaskItem(i))); return(result); }
static void Main(string[] args) { string projectFileName = @"C:\Users\Sandipan\Documents\Visual Studio 2010\Projects\Base64\Base64\Base64.csproj"; var projectCollection = new ProjectCollection(); projectCollection.DefaultToolsVersion = "4.0"; // Console.WriteLine("Available Toolsets: " + string.Join(", ", projectCollection.Toolsets.Select(item => item.ToolsVersion))); // Console.WriteLine("Toolset currently being used: " + projectCollection.DefaultToolsVersion); Project project = projectCollection.LoadProject(projectFileName); // ConsoleLogger logger = new ConsoleLogger(); MsBuildLogger logger = new MsBuildLogger(); // logger.Verbosity = LoggerVerbosity.Detailed; List<ILogger> loggers = new List<ILogger>(); loggers.Add(logger); projectCollection.RegisterLoggers(loggers); // there are a lot of properties here, these map to the MsBuild CLI properties //Dictionary<string, string> globalProperties = new Dictionary<string, string>(); //globalProperties.Add("Configuration", "Debug"); //globalProperties.Add("Platform", "x86"); //globalProperties.Add("OutputPath", @"D:\Output"); //BuildParameters buildParams = new BuildParameters(projectCollection); //MsBuildLogger logger = new MsBuildLogger(); //// logger.Verbosity = LoggerVerbosity.Detailed; //List<ILogger> loggers = new List<ILogger>() { logger }; //buildParams.Loggers = loggers; //BuildRequestData buildRequest = new BuildRequestData(projectFileName, globalProperties, "4.0", new string[] { "Build" }, null); //BuildResult buildResult = BuildManager.DefaultBuildManager.Build(buildParams, buildRequest); // this is where the magic happens - in process MSBuild //buildResult.ResultsByTarget.ToList().ForEach(item => new Action(delegate() { // Console.WriteLine(item.Key + ", " + item.Value.ResultCode.ToString()); // Console.WriteLine(string.Join(", ", item.Value.Items.ToList().Select(target => target.ItemSpec))); //}).Invoke()); try { project.Build(); } finally { projectCollection.UnregisterAllLoggers(); Console.WriteLine("TARGETS\n" + string.Join("\n", logger.Targets.Select(item => string.Format("[{0}, {1}]", item.Name, item.Succeeded ? "Succeeded" : "Failed")))); Console.WriteLine("ERRORS\n" + string.Join("\n", logger.Errors)); Console.WriteLine("WARNINGS\n" + string.Join("\n", logger.Warnings)); } Console.ReadKey(true); }