Присвойте ошибки проектам в Logger для MSBuild2008 с / m: x (x> 1) - PullRequest
0 голосов
/ 14 января 2009

Мы строим с использованием MSBuild2005 с самописным классом Logger, который отслеживает, какие проекты строятся в данный момент, и назначает входящие ошибки / предупреждения проектам. Это было довольно сложно, потому что MSBuild также вызывает ProjectStarted / FinishedEventArgs, когда он «каким-то образом» обращается к ссылочным проектам. Но у меня все получилось.

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

Итак, мой вопрос: как я могу назначить сообщения об ошибках / предупреждения проектам?

1 Ответ

0 голосов
/ 15 января 2009

Люблю ответ сам:

В .Net 3.5 класс BuildEventArgs содержит новое свойство BuildEventContext, которое содержит ProjectContextId. Это уникально в то время и позволяет точное назначение.

...