Bra*_*son 8 msbuild msbuild-task
我有一个xUnit.net的自定义MSBuild任务.当任务运行时,如果我按Ctrl + C,它"尝试"取消任务,但当然失败(因为我的任务不支持取消).没有任何MSDN文档搜索或Google-fu已经获得解决方案.由于我找不到一个明显的接口来实现,我猜测可能通过一些约定来支持取消.
有没有人以前做过这个,知道取消工作需要什么?
小智 15
您的任务需要实现ICancelableTask.这是4.0中添加的非常简单的界面.
基本上你只需添加一个Cancel()方法.它必须随时可以在不同的线程上调用,并立即返回.然后,您的任务必须立即从Execute返回.通常,您在Cancel()中设置一个布尔标志.然后在你的任务中你通常会循环处理每个输入 - 例如,一个接一个地复制一个文件 - 并在每次迭代中检查标志; 如果这是真的,那就爆发吧.在此上下文中,从Execute返回true或false无关紧要.
如果您是从ToolTask派生的 - 如果您的任务产生了一个工具,那么强烈建议您这样做,因为它可以节省大量代码,处理异步日志记录等等 - 然后它已经自动处理取消.当取消发生时,它会杀死它产生的工具及其所有子项.在某些情况下,C++团队的任务会覆盖此默认行为,因此他们的编译器/链接器在返回之前有几秒钟的时间来清理其半写输出.
(琐事:当我第一次在MSBuild中实现这个时,我不小心偶尔将VS蓝屏放到了盒子里.这几乎是在VS10测试版中发布的,但是及时发现了.蓝屏是因为找出进程树的逻辑是错误的,并且会有时会杀死一个系统进程.糟糕.)
担
| 归档时间: |
|
| 查看次数: |
1192 次 |
| 最近记录: |