пакетирование файловых строк по метаданным группы элементов в msbuild - PullRequest
4 голосов
/ 03 мая 2011

Как пакетировать строки из файлов по метаданным, переданным в 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 Ответ

2 голосов
/ 05 мая 2011

Кажется, что то, что вы пытаетесь достичь, невозможно, из-за того, что <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 и т.*

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...