1

所以我在 MSBuild 中有一个运行实用程序的 EXEC 任务。此实用程序会写入日志文件,但不会在标准输出上产生输出。

在发生错误的情况下(实用程序返回的 ReturnCode 不是 0),我想获取日志文件的内容并根据内容输出一条消息。

问题是日志文件很大,我只对其中的一小部分感兴趣。而且我不知道如何提取那一小部分以包含在构建日志错误通知中。然而,重要的是人们要了解哪里出了问题,而不仅仅是哪里出了问题。

文件格式是这样的,在出现错误的情况下:

Line1
Line2
Line3
*** Something Bad Happened
Details on something bad
*** Run Failed
LineX
LineY
LineZ

所以我需要的是一种提取行的方法,从以三个星号开头的第一行开始,继续到以三个星号开头的下一行,包括在内。我不需要担心有超过两行以三个星号开头的情况,因为这种情况永远不会发生。

这甚至有可能吗?如果是这样,我无法弄清楚魔法咒语。我愿意(在短期内)只用三个星号抓住第一行,并且能够记录那个,但我真的很想得到整个行。

4

1 回答 1

1
<Target Name="LogError" Condition="$(ExitCode) != 0">
    <PropertyGroup>
        <ErrorFile>foo.log</ErrorFile>
        <ErrorRead>$([System.IO.File]::ReadAllText($(ErrorFile)))</ErrorRead>
        <ErrorText>$([System.Text.RegularExpressions.Regex]::Match($(ErrorRead), '^\*\*\* [\s\S]*^\*\*\* .*', System.Text.RegularExpressions.RegexOptions.Multiline))</ErrorText>
    </PropertyGroup>
    <Error File="$(ErrorFile)" Text="$(ErrorText)" />
</Target>
于 2014-06-13T10:22:53.407 回答