Динамические метаданные элемента по умолчанию
Рассмотрим следующую структуру файлов. Каждый элемент в 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>
Как я могу сгенерировать метаданные элемента по умолчанию, которые зависят от метаданных на элемент и зависят от дополнительных метаданных на элемент?