MSBuild错误任务、从文件中读取行以及用于日志记录的自定义消息

MSBuild错误任务、从文件中读取行以及用于日志记录的自定义消息,msbuild,msbuild-task,Msbuild,Msbuild Task,因此,我在MSBuild中有一个运行实用程序的EXEC任务。此实用程序写入日志文件,但不在标准输出上生成输出 在出现错误的情况下(实用程序返回的返回代码不是0),我希望获取日志文件的内容并根据内容输出消息 问题是日志文件很大,我只对其中的一小部分感兴趣。我不知道如何提取这一小部分以包含在构建日志错误通知中。然而,重要的是,人们要了解出了什么问题,而不仅仅是出了什么问题 如果出现错误,文件格式如下所示: Line1 Line2 Line3 *** Something Bad Happened De

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

在出现错误的情况下(实用程序返回的返回代码不是0),我希望获取日志文件的内容并根据内容输出消息

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

如果出现错误,文件格式如下所示:

Line1
Line2
Line3
*** Something Bad Happened
Details on something bad
*** Run Failed
LineX
LineY
LineZ
所以我需要的是一种提取行的方法,从第一行以三个星号开始,继续到下一行以三个星号开始,包括三个星号。我不需要担心有两行以上以三个星号开头的情况,因为这永远不会发生

这有可能吗?如果是的话,我想不出魔法咒语。我愿意(在短期内)只抓取第一行有三个星号的内容,并且能够记录下来,但我真的很想得到整个行块。


<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>
foo.log $([System.IO.File]::ReadAllText($(ErrorFile))) $([System.Text.RegularExpressions.Regex]::匹配($(ErrorRead),'^\*\*\*\[\s\s]*^\*\*\*.*',System.Text.RegularExpressions.RegexOptions.Multiline))

foo.log
$([System.IO.File]::ReadAllText($(ErrorFile)))
$([System.Text.RegularExpressions.Regex]::匹配($(ErrorRead),'^\*\*\*\[\s\s]*^\*\*\*.*',System.Text.RegularExpressions.RegexOptions.Multiline))

我甚至愿意接受一种方法,将从三个星号到文件末尾的所有行(包括在内)都提取出来。我还是不明白。我只是想在构建日志中包含一些作为构建的一部分运行的实用程序的日志文件,这样不需要太多挖掘就可以更容易地诊断错误。我甚至愿意接受一种方法,从三个星号到文件末尾(包括)的所有行。我还是不明白。我只是想在构建日志中包含一些作为构建的一部分运行的实用程序的日志文件,这样不需要太多的挖掘就可以更容易地诊断错误。谢谢,我会尝试一下,让你知道它是如何运行的!谢谢,我会试试这个,让你知道它是怎么回事!