Подсчет предупреждений из задачи MSBuild - PullRequest
4 голосов
/ 12 августа 2011

У меня есть следующий 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.

Возможно ли это?

Спасибо

Ответы [ 2 ]

1 голос
/ 12 сентября 2011

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

1 голос
/ 09 сентября 2011

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

Обновление : еще одна возможность - использовать задачу Exec для вызова MSBuild, перенаправляя свои выходные данные в файл:

<Exec WorkingDirectory="$(BuildFolder)"
  IgnoreExitCode="true"
  Command="$(MSBuildDirectory)msbuild params > output_file.txt"
>
...