代码之家  ›  专栏  ›  技术社区  ›  Charlie

如何以编程方式取消嵌入式MsBuild生成

  •  0
  • Charlie  · 技术社区  · 17 年前

    我将MSBuild直接嵌入到更复杂的构建工具中。相关代码大致如下所示:

    // assume 'using Microsoft.Build.BuildEngine;'
    Engine e = Engine();
    BuildPropertyGroup props = new BuildPropertyGroup();
    props.SetProperty( "Configuration", Config.BuildConfig );
    e.BuildProjectFile( projectFile, new string[] { "Build" }, props )
    

    我的问题是,如何在这个构建启动后取消它,而不必执行终止线程之类的激烈操作。此外,如果正在构建的项目是C++项目,则构建将涉及至少一个子过程,因此取消线程甚至不会真正取消构建。

    3 回复  |  直到 17 年前
        1
  •  1
  •   Joseph Ferris    17 年前

    这个问题在MSDN板上出现过几次,不幸的是,除了终止线程之外,我没有看到其他任何方法。不幸的是,在这种情况下,终止线程并不是非常激烈,因为它是唯一的实际选择。

    MSBuild Extension Pack

        2
  •  0
  •   Klathzazt    17 年前

    通过从命令运行msbuild,我做了类似的事情。这将启动一个可以终止的进程。

    根据我的经验,使用xml工具操作项目文件,然后执行msbuild要比按照前面描述的方式以编程方式配置项目容易得多,也更灵活。它也更易于管理。

        3
  •  0
  •   Charlie    17 年前

    对于C#builds来说,这并不是什么大问题,因为它们通常非常快。我为C++生成所做的最好的解决方法是找到由VC构建过程创建的子进程并终止它们,从而停止MSBudio构建。这可以使用Toolhelp32快照来完成,类似这样(省略P/Invoke垃圾):

    CreateToolhelp32Snapshot( ToolHelp.SnapshotFlags.Process, 0 );