private static void BuildProject(string projectFile) { Console.WriteLine("Building Project [" + projectFile + "]"); var collection = new ProjectCollection {DefaultToolsVersion = "12.0"}; collection.LoadProject(projectFile); collection.RegisterLoggers(new List<ILogger> { new ConsoleLogger(), new FileLogger {Parameters = projectFile + ".build.log"}}); try { foreach (var project in collection.LoadedProjects.Where(x => x.IsBuildEnabled)) { project.SetProperty("Platform", "x64"); if (!project.Build()) throw new BuildException(projectFile); project.SetProperty("Configuration", "Release"); if (!project.Build()) throw new BuildException(projectFile); } } finally { collection.UnregisterAllLoggers(); } }
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); }
public void ProjectCollectionChangedEvent() { ProjectCollection collection = new ProjectCollection(); bool dirtyRaised = false; ProjectCollectionChangedState expectedChange = ProjectCollectionChangedState.Loggers; collection.ProjectCollectionChanged += (sender, e) => { Assert.Same(collection, sender); Assert.Equal(expectedChange, e.Changed); dirtyRaised = true; }; Assert.False(dirtyRaised); expectedChange = ProjectCollectionChangedState.DisableMarkDirty; dirtyRaised = false; collection.DisableMarkDirty = true; // LEAVE THIS TRUE for rest of the test, to verify it doesn't suppress these events Assert.True(dirtyRaised); expectedChange = ProjectCollectionChangedState.IsBuildEnabled; dirtyRaised = false; collection.IsBuildEnabled = !collection.IsBuildEnabled; Assert.True(dirtyRaised); expectedChange = ProjectCollectionChangedState.OnlyLogCriticalEvents; dirtyRaised = false; collection.OnlyLogCriticalEvents = !collection.OnlyLogCriticalEvents; Assert.True(dirtyRaised); expectedChange = ProjectCollectionChangedState.SkipEvaluation; dirtyRaised = false; collection.SkipEvaluation = !collection.SkipEvaluation; Assert.True(dirtyRaised); expectedChange = ProjectCollectionChangedState.GlobalProperties; dirtyRaised = false; collection.SetGlobalProperty("a", "b"); Assert.True(dirtyRaised); expectedChange = ProjectCollectionChangedState.GlobalProperties; dirtyRaised = false; collection.RemoveGlobalProperty("a"); Assert.True(dirtyRaised); // Verify HostServices changes raise the event. expectedChange = ProjectCollectionChangedState.HostServices; dirtyRaised = false; collection.HostServices = new Execution.HostServices(); Assert.True(dirtyRaised); expectedChange = ProjectCollectionChangedState.Loggers; dirtyRaised = false; collection.RegisterLogger(new MockLogger()); Assert.True(dirtyRaised); expectedChange = ProjectCollectionChangedState.Loggers; dirtyRaised = false; collection.RegisterLoggers(new Microsoft.Build.Framework.ILogger[] { new MockLogger(), new MockLogger() }); Assert.True(dirtyRaised); expectedChange = ProjectCollectionChangedState.Loggers; dirtyRaised = false; collection.UnregisterAllLoggers(); Assert.True(dirtyRaised); expectedChange = ProjectCollectionChangedState.Toolsets; dirtyRaised = false; collection.AddToolset(new Toolset("testTools", Path.GetTempPath(), collection, Path.GetTempPath())); Assert.True(dirtyRaised); expectedChange = ProjectCollectionChangedState.DefaultToolsVersion; dirtyRaised = false; collection.DefaultToolsVersion = "testTools"; Assert.True(dirtyRaised); expectedChange = ProjectCollectionChangedState.Toolsets; dirtyRaised = false; collection.RemoveToolset("testTools"); Assert.True(dirtyRaised); expectedChange = ProjectCollectionChangedState.Toolsets; dirtyRaised = false; collection.RemoveAllToolsets(); Assert.True(dirtyRaised); }
public void executes_msbuild_postman_generatetask() { // arrange var loggers = new List<ILogger>(); loggers.Add(new ConsoleLogger()); var projectCollection = new ProjectCollection(); projectCollection.RegisterLoggers(loggers); var projectDir = Path.GetDirectoryName(Path.GetDirectoryName(TestContext.CurrentContext.TestDirectory)); var assemblyFile = Path.Combine(projectDir, @"bin\debug\Postman.WebApi.MsBuildTask.dll"); var projectFile = Path.Combine(projectDir, @"Postman.WebApi.MsBuildTask.Tests.csproj"); var task = @"Postman.WebApi.MsBuildTask.GenerateTask"; var project = projectCollection.LoadProject(projectFile); project.Xml.AddUsingTask(task, assemblyFile, string.Empty); var target = project.Xml.AddTarget("AfterBuild"); var el = target.AddTask(task); el.SetParameter("AssemblyFilePath", "$(TargetPath)"); el.SetParameter("EnvironmentKey", "myhost"); el.SetParameter("RouteTemplate", "myapi/v2/{controller}"); el.SetParameter("OutputDirectory", Path.GetTempPath()); // act var actual = project.Build("AfterBuild"); // assert actual.Should().BeTrue(); AssertOutputFile(Path.Combine(Path.GetTempPath(), @"Postman.WebApi.MsBuildTask.Tests.postman.json")); }