Подсчет предупреждений от задачи MSBuild

У меня есть следующий msbuild goop:

<MSBuild Projects="$(MySLN)" Targets="Build" />
<!--count all warning and fail if > 20-->
<Exec WorkingDirectory="$(BuildFolder)"
  IgnoreExitCode="true"
  Command="$(POWERSHELL) -command $host.SetShouldExit(([xml](get-content '$(LogsFolder)productbuild-results.xml')).SelectNodes('//warning').count)"
>
  <Output PropertyName="BuildSLNWarningCount" TaskParameter="ExitCode" />
</Exec>

Теоретически это будет подсчитывать количество предупреждений в файле журнала, поэтому я могу прервать сборку, если их слишком много (> 20 в нашем случае).

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

Это возможно?

Спасибо


person Jonesie    schedule 11.08.2011    source источник
comment
О боже. Неужели никто не может ответить на это?   -  person Jonesie    schedule 18.08.2011


Ответы (2)


Я бы рекомендовал использовать класс BuildManager... Метод BeginBuild в BuildManager позволяет передать набор BuildParameters, который включает свойство Loggers. В Logger вы можете записывать все, что MSBUILD выводит, подсчитывать и т. Д.

person Yahia    schedule 11.09.2011

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

Обновление. Другая возможность заключается в использовании задачи Exec для вызова MSBuild с перенаправлением его вывода в файл:

<Exec WorkingDirectory="$(BuildFolder)"
  IgnoreExitCode="true"
  Command="$(MSBuildDirectory)msbuild params > output_file.txt"
>
person dario_ramos    schedule 09.09.2011
comment
Да, я надеялся избежать этого. Но я не думаю, что это все равно поможет, так как мне нужны выходные предупреждения задачи MSBuild, и если я не напишу свою собственную задачу MSBuild, я не вижу, как это сделать. Спасибо. - person Jonesie; 09.09.2011
comment
Вы можете вызвать задачу MSBuild из своей пользовательской задачи и зафиксировать ее выходные данные. Как я это вижу, нет предела тому, что вы можете сделать с пользовательской задачей. - person dario_ramos; 09.09.2011
comment
Но затем я возвращаюсь к своей первоначальной проблеме — как записать вывод в файл? - person Jonesie; 12.09.2011