Как в задаче MSBuild получить доступ ко всем предупреждениям, созданным сборкой?

Моя общая цель — прочитать все предупреждения в конце сборки решения, а затем зарегистрировать их как ошибки. Это отличается от параметра TreatWarningsAsErrors, поскольку он также должен создавать двоичные файлы для проектов, в которых были такие предупреждения.

Я ожидаю решить эту проблему с помощью пользовательской задачи MSBuild, но я не знаю, что мне нужно, чтобы передать ее из файла .targets.

РЕДАКТИРОВАТЬ: я не думаю, что это дубликат этот вопрос, потому что он касается синтаксического анализа журнала для определенной строки и выдачи ошибки для этого конкретного кода. Я хочу получить список всех предупреждений в сборке вне зависимости от их содержания.


person Dahud    schedule 04.05.2017    source источник
comment
Возможный дубликат Как я могу рассматривать предупреждение MSB3245 (не удалось разрешить ссылку) как ошибку? ; вопрос выглядит несколько иначе, но в итоге он тот же: как действовать при предупреждениях, выдаваемых логгером во время сборки.   -  person stijn    schedule 04.05.2017
comment
stjin - это может быть полезно, но я не хочу просто ловить определенные предупреждения. Я хочу поймать все предупреждения. Поскольку они могут быть в разных формах, прямого разбора журнала может быть недостаточно. Я попробую это все же.   -  person Dahud    schedule 05.05.2017
comment
Насколько я знаю, все предупреждения, выдаваемые инструментами MS, должны соответствовать регулярному выражению warning [^:]+: без учета регистра, которое достаточно легко применить к связанному ответу. И другим инструментам лучше следовать тому же соглашению, если они хотят, чтобы их сообщения вели себя в соответствии с разрешением.   -  person stijn    schedule 05.05.2017


Ответы (1)


Вы не можете получать предупреждения о сборке внутри задачи, поскольку у нее просто нет доступа к этой информации. Предупреждения выдаются и отправляются в инфраструктуру журналирования MS Build и обрабатываются там, что полностью оторвано от выполнения задачи.

Однако вы можете написать собственный регистратор для отслеживания предупреждений, выдаваемых сборкой. С помощью вашего пользовательского регистратора всякий раз, когда возникает событие предупреждения, просто записывайте его, а затем, когда сборка завершится, вы можете делать с этой информацией все, что захотите.

См. документацию здесь и здесь о том, как написать собственный регистратор .

person Michael Baker    schedule 05.05.2017