我们使用 MSBuild2005 和自写的 Logger 类进行构建,该类跟踪当前正在构建的项目并将传入的错误/警告分配给项目。这有点棘手,因为 MSBuild 在“以某种方式”访问引用的项目时也会调用 ProjectStarted/FinishedEventArgs。但我得到了它的工作。
现在我们要切换到 MSBuild2008。一切正常,直到我们打开并行构建(/m:2 或更高版本;这是我等待的功能!)。我的理解是,我可以通过查看 BuildEventMessages 中的 ThreadId 属性来跟踪并行任务。但是,一旦您启用并行构建,这将无法按预期工作。我遇到了一个项目是在 ThreadId 1 上构建的,而另一个项目是在 ThreadId 5 上启动的。但之后第三个程序从 ThreadId 5 开始!奇怪的是,这些项目表现得“像堆栈一样”:第二个在第一个之前完成。所以我想:可能没问题,但是我该如何分配错误。检查我是否在一个项目中插入了错误的代码。结果是:错误消息有一个全新的 ThreadId(不是 1 或 5,而是 6)!
所以我的问题是:如何将错误/警告消息分配给项目?