示例#1
0
        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);
        }
示例#3
0
    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);
    }