Wednesday, March 30, 2011

How to call MSBuild from C#

Is there a better way to call MSBuild from C#/.NET than shelling out to the msbuild.exe? If yes, how?

From stackoverflow
  • Yes, add a reference to Microsoft.Build.Engine and use the Engine class.

    PS: Take care to reference the right version. There are 2.0 and 3.5 assemblies and you'll have to make sure that everyone gets the right one.

  • For a .NET 2.0-specific version, you can use the following:

    Engine engine = new Engine();
    engine.BinPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.System)
        + @"\..\Microsoft.NET\Framework\v2.0.50727";
    
    FileLogger logger = new FileLogger();
    logger.Parameters = @"logfile=C:\temp\test.msbuild.log";
    engine.RegisterLogger(logger);
    
    string[] tasks = new string[] { "MyTask" };
    BuildPropertyGroup props = new BuildPropertyGroup();
    props.SetProperty("parm1","hello Build!");
    
    try
    {
      // Call task MyTask with the parm1 property set
      bool success = engine.BuildProjectFile(@"C:\temp\test.msbuild",tasks,props);
    }
    catch (Exception ex)
    {
      // your error handler
    }
    finally
    {
     engine.UnregisterAllLoggers();
     engine.UnloadAllProjects();
    }
    

0 comments:

Post a Comment