在MSBuild中通过ItemGroup元数据批处理文件字符串

4

如何根据itemgroup中传递的元数据和文件名批量从文件中提取字符串?

这是我目前的代码,但我无法将初始itemgroups元数据Level传递给结果item group Lines

<ItemGroup>
 <LogFile Include="1.log">
   <Level>Warning</Level>
 </LogFile>
 <LogFile Include="2.log">
   <Level>Warning</Level>
 </LogFile>
 <LogFile Include="3.log">
  <Level>Error</Level>
 </LogFile>
<ItemGroup>

<ReadLinesFromFile
    File="@(LogFile)" >
    <Output
        TaskParameter="Lines"
        ItemName="LogMessage"/>
</ReadLinesFromFile>

<Message Text="%(LogMessage.Identity)" />

What i want to get is:

Warning: (lines from 1.log>
Warning: (lines from 2.log>
Error: (lines from 3.log)

其中,%(LogFile.Level) 给出了警告和错误信息。

1个回答

2

看起来您想实现的目标是不可能的,因为 <ReadLinesFromFile> 不接受 ITaskItem 集合 @(LogFile) 作为其文件输入,并且您需要在任务级别上进行批处理 %(LogFile.Identity)

<Project ToolsVersion="4.0" DefaultTargets="PrintOut">
    <ItemGroup>
        <LogFile Include="1.log">
            <Level>Warning</Level>
        </LogFile>
        <LogFile Include="2.log">
            <Level>Warning</Level>
        </LogFile>
        <LogFile Include="3.log">
            <Level>Error</Level>
        </LogFile>
    </ItemGroup>

    <Target Name="ReadLogs">
        <ReadLinesFromFile File="%(LogFile.Identity)">
            <Output TaskParameter="Lines" ItemName="LogMessage" />
        </ReadLinesFromFile>
    </Target>

    <Target Name="PrintOut" DependsOnTargets="ReadLogs">
        <Message Text="%(LogMessage.Identity)" />
    </Target>
</Project>

有一些关于任务批处理中项目元数据的示例,但它们都处理可以处理ITaskItem集合输入(如Copy等)的任务。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接