我有几个长期运行的自定义构建任务。它看起来像Visual Studio,但是在UI线程上运行msbuild任务,这导致IDE挂起。
我在google上做了一些搜索,我发现的最好的是一些错误报告,回复“哦,是的,这是一个问题,我们可能会在以后修复它。”
http://social.msdn.microsoft.com/Forums/en-US/msbuild/thread/3289eb7d-7989-4350-8c43-02bf9913edbd/
所以,我决定通过以下方式修复我的自定义任务:
这似乎有效。我现在可以在没有IDE冻结的情况下运行我的构建。
无论如何,这提出了几个问题:
这样做安全吗? Visual Studio是一件大事。如果我这样做,我会遇到任何重入问题吗?那些重新引发的问题会导致世界结束,还是我可以忽视它们。
我使用this post中概述的技术检测Visual Studio。基本上,我将“BuildingInsideVisualStudio”属性的值赋给任务上的属性,我在我的Execute()方法中检查。如果是真的,那么我使用多线程行为,否则我只使用顺序行为。但是,这需要使用任务的每个目标将额外的goo放入msbuild文件中以避免出现问题。理想情况下,我希望“不吸吮”成为正常行为,没有特殊配置。有什么方法可以在我的任务的Execute()方法中检测visual studio吗?我是否可以在任务实现中读取项目属性而无需对XML进行自定义编辑?我可以以某种方式询问Host对象吗?
感谢。
答案 0 :(得分:1)
尝试将环境变量MSBuildNoInProcNode设置为1,然后启动IDE。这将强制IDE构建对子节点的请求。请注意,这不是一个经过完全测试的场景,因此可能会出现一些意外行为,但它可能是获得所需结果的替代方法,而无需更改项目文件或所有自定义任务。