Динамическое назначение метаданных в ItemGroup - PullRequest
1 голос
/ 21 июля 2011

У меня есть ItemGroup, определенный как:

<ItemGroup>
    <ProtoFiles Include="Protos\*.proto"/>
</ItemGroup>

. Он выдает список всех .proto файлов в каталоге моего проекта.Я хочу, чтобы каждый элемент в группе содержал часть метаданных, в которой указано имя файла, который будет сгенерирован на основе файла .proto .Я знаю, что могу сделать это:

<ItemGroup>
    <ProtoFiles Include="Protos\*.proto">
        <OutputFile>%(ProtoFiles.Filename).cs</OutputFile>
    </ProtoFiles>
</ItemGroup>

Но моя проблема в том, что это не простое сопоставление имени файла .proto для вывода имени файла.Тут есть какая-то хитрая логика, которую мне нужно где-то инкапсулировать и вызывать при назначении метаданных.Мне нужно что-то вроде:

<ItemGroup>
    <ProtoFiles Include="Protos\*.proto">
        <OutputFile><GetOutputFilename ProtoFilename="%(ProtoFiles.Filename)"/></OutputFile>
    </ProtoFiles>
</ItemGroup>

Идея заключается в том, что моя пользовательская задача GetOutputFilename будет вызвана для получения значения метаданных.

Возможно ли это?Я лаю не на том дереве?

Ответы [ 2 ]

1 голос
/ 21 июля 2011

Трудно понять, слишком ли сложна логика для MSBuild, не зная точно, что это такое. У вас есть пользовательское задание, которое работает с @ (ProtoFiles) для генерации выходных файлов? Если так, то почему бы не изменить свою задачу (или изменить ее на новую), которая просто вычисляет выходные файлы, не создавая их, что-то вроде этого,

<ProtoTask
   Files="@(ProtoFiles)"
   ... other params
   DryRun="true">
   <Output
      TaskParameter="OutputFiles"
      ItemName="ProtoFiles" />
</ProtoFiles>

Задача может клонировать массив элементов, вычислить значение метаданных и назначить его массиву выходных элементов, который в приведенном здесь примере перезаписывает исходный массив элементов, переданный в задачу.

1 голос
/ 21 июля 2011

Я думаю, что нет, попробуйте вместо этого передать ItemGroup задаче для генерации этих метаданных. Функции свойств могут работать на значениях метаданных, но, к сожалению, не может использоваться для определения метаданных .

...