如何通过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)
给出答案 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
等)。