Пример #1
0
        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();
            }
        }
Пример #2
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);
    }
Пример #3
0
        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"));
		}