按msbuild中的itemgroup元数据批处理文件字符串

时间:2011-05-03 10:35:57

标签: msbuild

如何通过itemgroup中传递的元数据和文件名来批处理文件中的字符串?

以下是我到目前为止的内容,但无法弄清楚如何将初始项目组元数据Level传递给结果项目组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)" />

我想得到的是:

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

其中警告和错误由%(LogFile.Level)

给出

1 个答案:

答案 0 :(得分:2)

由于<ReadLinesFromFile>不接受ITaskItem Collection @(LogFile)作为其File输入,您似乎无法实现的目标,并且您将拥有批处理任务级别%(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>

有一些关于Item Metadata in Task Batching的例子,但它们都处理可处理ITaskItem Collection输入的任务(如Copy等)。