我有以下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使用的完整构建详细信息。
这可能吗?
由于
答案 0 :(得分:1)
我认为你最好的选择是编写一个自定义的MSBuild任务,它可以完成你需要的一切,并在你的构建脚本中调用它。我在博客上写了一个例子here。我的任务与你的任务截然不同,但你应该得到关于编写自定义任务的主要概念。
更新:另一个可能性是使用Exec
任务调用MSBuild将其输出重定向到文件:
<Exec WorkingDirectory="$(BuildFolder)"
IgnoreExitCode="true"
Command="$(MSBuildDirectory)msbuild params > output_file.txt"
>
答案 1 :(得分:1)
我建议使用BuildManager
课程......
BuildManager上的BeginBuild方法允许您传入一组包含Loggers属性的BuildParameters。在Logger中,您可以捕获任何MSBUILD输出和计数等。