Динамические метаданные элемента по умолчанию

Рассмотрим следующую структуру файлов. Каждый элемент в Things содержит следующие метаданные:

  • CustomData1 является предметно-ориентированным;
  • ComputedData зависит от CustomData1, но само преобразование всегда одинаково (конечно, мой реальный случай имеет обширную последовательность преобразований с несколькими полезными выходами);
  • CustomData2 зависит от ComputedData,

<?xml version="1.0" encoding="utf-8"?>
<Project
    ToolsVersion="15.0"
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
    DefaultTargets="Run"
>
    <ItemGroup>
        <Things Include="my-thing-1">
            <CustomData1>data1</CustomData1>
            <ComputedData>%(CustomData1)-computed</ComputedData> <!-- Common code -->
            <CustomData2>%(ComputedData)-used1</CustomData2>
        </Things>
        <Things Include="my-thing-2">
            <CustomData1>data2</CustomData1>
            <ComputedData>%(CustomData1)-computed</ComputedData> <!-- Common code -->
            <CustomData2>%(ComputedData)-used2</CustomData2>
        </Things>
    </ItemGroup>

    <Target Name="Run">
        <Message
            Importance="High"
            Text="Things contains:%0a@(Things -> '%09%(Identity): %(CustomData1), %(ComputedData), %(CustomData2)', '%0a')"
        />
    </Target>
</Project>

Вышеуказанное работает как задумано, и выводит:

Things contains:
    my-thing-1: data1, data1-computed, data1-computed-used1
    my-thing-2: data2, data2-computed, data2-computed-used2

Все идет нормально. Теперь я пытаюсь разложить (в конечном итоге в другой файл, который импортирует этот) общий ComputedData часть, но не могу найти способ сделать это.

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

<ItemDefinitionGroup>
    <Things>
        <!-- Produces `my-thing-1-computed-1` (success) -->
        <ComputedData1>%(Identity)-computed1</ComputedData1>
        <!-- Produces `-computed-2` (failure) -->
        <ComputedData2>%(CustomData1)-computed2</ComputedData2>
    </Things>
</ItemDefinitionGroup>

Как я могу сгенерировать метаданные элемента по умолчанию, которые зависят от метаданных на элемент и зависят от дополнительных метаданных на элемент?

0 ответов

Другие вопросы по тегам