How do I build a solution programmatically in C#?

前端 未结 7 1930
日久生厌
日久生厌 2020-12-02 14:46

How do I build a C# solution programmatically?

I should be able to pass the path of a solution and get the output messages (or just build the solution). How do I ach

7条回答
  •  孤街浪徒
    2020-12-02 15:20

    Most of the answers are providing ways to do it by calling external commands, but there is an API, Microsoft.Build.Framework, to build via C#.


    Code from blog post:

    using Microsoft.Build.BuildEngine;
    using Microsoft.Build.Framework;
    using Microsoft.Build.Utilities;
    
    public class SolutionBuilder
    {
        BasicFileLogger b;
        public SolutionBuilder() { }
    
        [STAThread]
        public string Compile(string solution_name,string logfile)
        {
            b = new BasicFileLogger();
            b.Parameters = logfile;
            b.register();
            Microsoft.Build.BuildEngine.Engine.GlobalEngine.BuildEnabled = true;
            Project p = new Project (Microsoft.Build.BuildEngine.Engine.GlobalEngine);
            p.BuildEnabled = true;
            p.Load(solution_name);
            p.Build();
            string output = b.getLogoutput();
            output += “nt” + b.Warningcount + ” Warnings. “;
            output += “nt” + b.Errorcount + ” Errors. “;
            b.Shutdown();
            return output;
        }
    }
    // The above class is used and compilation is initiated by the following code,
    static void Main(string[] args)
    {
        SolutionBuilder builder = new SolutionBuilder();
        string output = builder.Compile(@”G:CodesTestingTesting2web1.sln”, @”G:CodesTestingTesting2build_log.txt”);
        Console.WriteLine(output);
        Console.ReadKey();
    }
    

    Note the code in that blog post works, but it is a little dated. The

    Microsoft.Build.BuildEngine

    has been broken up into some pieces.

    Microsoft.Build.Construction

    Microsoft.Build.Evaluation

    Microsoft.Build.Execution

提交回复
热议问题