Как прочитать файл журнала в задаче msbuild и проверить каждую строку - PullRequest
0 голосов
/ 18 октября 2019

Я хочу прочитать файл журнала, созданный в процессе сборки, и проверить, нет ли в нем сообщений об ошибках. И я хочу напечатать строки с сообщением об ошибке.

Пока что я могу прочитать файл и распечатать весь файл снова, но я не могу проверить несколько строк для текста исключения и напечатать только эти строкивне. Кто-нибудь намекнул на меня?

<Target Name="CheckLog">
    <PropertyGroup>
        <ErrorText>ERR</ErrorText>
    </PropertyGroup>

    <ReadLinesFromFile File="execution.log" >
        <Output TaskParameter="Lines" ItemName="FileContents" />
    </ReadLinesFromFile>

    <!-- lines are printed out correctly -->
    <Message Text="%(FileContents.Identity)" />

    <CreateProperty Value="true" Condition="@(FileContents.Contains('$(ErrorText)'))">
        <Output TaskParameter="Value" PropertyName="VerifyError" /> 
    </CreateProperty>

    <Message Text="@(VerifyError)" />
    <Error Condition="@(VerifyError) != ''" Text="Execution returned with an error." />
</Target>

Ответы [ 2 ]

0 голосов
/ 22 октября 2019

Может быть, даже более элегантно: только с помощью Задачи с ошибкой:

<Target Name="CheckLog">
    <PropertyGroup>
        <ErrorText>ERR</ErrorText>
    </PropertyGroup>
    <ReadLinesFromFile File="execution.log" >
        <Output TaskParameter="Lines" ItemName="FileContents" />
    </ReadLinesFromFile>

    <Error Text="%(FileContents.Identity)" Condition="$([System.String]::Copy('%(FileContents.Identity)').StartsWith($(ErrorText)))" />
</Target>
0 голосов
/ 21 октября 2019

Я нашел решение самостоятельно.

Сначала я добавил условие в задачу «Сообщение». Таким образом, строки фильтруются. Печатаются только строки, которые указывают на ошибку.

Во-вторых, я заменил задачу CreateProperty. Сейчас я использую PropertyGroup для создания свойства, которое содержит все строки (не совсем то, что я хотел изначально, но оно работает для меня вместе со следующим пунктом).

И в-третьих, я изменил условие ошибки. Я проверяю, произошла ли во всем тексте ошибка.

<Target Name="CheckLog">
    <PropertyGroup>
        <ErrorText>ERR</ErrorText>
    </PropertyGroup>

    <ReadLinesFromFile File="execution.log" >
        <Output TaskParameter="Lines" ItemName="FileContents" />
    </ReadLinesFromFile>

    <Message Text="%(FileContents.Identity)" Condition="$([System.String]::Copy('%(FileContents.Identity)').StartsWith($(ErrorText)))" />

    <PropertyGroup>
        <AllLines>@(FileContents)</AllLines>
    </PropertyGroup>
    <Error Condition="$(AllLines.Contains($(ErrorText)))" Text="Execution returned with an error." />
</Target>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...