#msbuild
#msbuild
Вопрос:
Как пакетная обработка строк из файлов с помощью метаданных, переданных в itemgroup вместе с именами файлов?
Вот что у меня есть на данный момент, но я не могу понять, как передать исходные метаданные itemgroups 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.Уровень)
Ответ №1:
Кажется, что то, чего вы пытаетесь достичь, невозможно из-за того, что <ReadLinesFromFile>
не принимает коллекцию ITaskItem @(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>
Есть несколько примеров о метаданных элемента при пакетной обработке задач, но все они имеют дело с задачами, которые могут обрабатывать входные данные коллекции ITaskItem (например, Copy
и т.д.).