Мы строим с использованием MSBuild2005 с самописным классом Logger, который отслеживает, какие проекты строятся в данный момент, и назначает входящие ошибки / предупреждения проектам.
Это было довольно сложно, потому что MSBuild также вызывает ProjectStarted / FinishedEventArgs, когда он «каким-то образом» обращается к ссылочным проектам. Но у меня все получилось.
Теперь мы хотим перейти на MSBuild2008. Все работает нормально, пока мы не включим параллельные сборки (/ m: 2 или выше; это функция, которую я ждал!).
Насколько я понимаю, я могу отслеживать параллельные задачи, наблюдая за свойством ThreadId в BuildEventMessages. Но это не сработает, как ожидается, как только вы включите параллельные сборки.
Я получил случай, когда один проект был построен на ThreadId 1, а другой запускается на ThreadId 5. Но после этого третья программа запускается на ThreadId 5! Любопытно, что эти проекты ведут себя как «стек»: второй заканчивается раньше первого. Вот я и подумала: может быть в порядке, но как я могу назначить ошибки. Чтобы проверить, что я вставил ошибочный код в один проект. И результат был: у сообщения об ошибке был совершенно новый ThreadId (не 1 или 5, а 6)!
Итак, мой вопрос: как я могу назначить сообщения об ошибках / предупреждения проектам?