Building programmatically a project

后端 未结 3 1975
心在旅途
心在旅途 2021-01-04 04:02

I need to build a project programmatically for a .csproj I am creating on the fly. While searching Google I found the classes and API provided by the MS for the MSBuild Engi

相关标签:
3条回答
  • 2021-01-04 04:32

    Thanks @ritchmelton. Though I figured it out myself. Here is my code : I have used an in built logger ConsoleLogger

    public class Compiler
        {
            private static string locationOfMSBuilldEXE = "";
            public static void Build(string msbuildFileName)
            {
                ConsoleLogger logger = new ConsoleLogger(LoggerVerbosity.Normal);
                BuildManager manager = BuildManager.DefaultBuildManager;
    
                ProjectInstance projectInstance = new ProjectInstance(msbuildFileName);
                var result = manager.Build(
                    new BuildParameters() 
                    {
                        DetailedSummary = true,
                        Loggers = new List<ILogger>(){logger}
                    }, 
                    new BuildRequestData(projectInstance, new string[] { "Build" }));
                var buildResult = result.ResultsByTarget["Build"];
                var buildResultItems = buildResult.Items;
    
                string s = "";
            }
        }
    
    0 讨论(0)
  • 2021-01-04 04:37

    You need to add a instance of a class that implements the ILogger interface to your BuildParameters. You can add a new instance of one of the supplied loggers in the Microsft.Build.Logging namespace, or you can implement ILogger yourself as it is very small and there is a helper class in the Microsoft.Build.Utilities namespace called Logger that is easy to extend.

    Build loggers

    ILogger interface

    Logger helper

    0 讨论(0)
  • 2021-01-04 04:45

    If you just want to build a project or solution, without elaborate parameters, you can do it more simply. Pseudocode:

    using namespace Microsoft.Build.Evaluation;
    
    var p = Project.Load("path to project");
    p.SetGlobalProperty("Configuration", "Release");
    p.Build(...);
    

    That's it! BuildParameters and so forth are for quite advanced scenarios. Visual Studio itself uses them.

    Dan (msbuild dev)

    0 讨论(0)
提交回复
热议问题