У меня есть проект msbuild, который заставляет меня задаться вопросом, почему результат такой, какой он есть. Не то, чтобы это вызывает проблему или что-то в этом роде, но я хотел бы попытаться лучше понять это.
<?xml version="1.0" encoding="utf-8" ?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="TestTarget1;TestTarget2" ToolsVersion="3.5">
<ItemGroup>
<PathDir Include="C:\RootDir\UniqueDir1"/>
<PathDir Include="C:\RootDir\UniqueDir2" />
</ItemGroup>
<Target Name="TestTarget1" Outputs="%(PathDir.Identity)">
<PropertyGroup>
<RootPath>%(PathDir.Identity)</RootPath>
</PropertyGroup>
<ItemGroup>
<SubDirectory Include="Common1"/>
<SubDirectory Include="Common2"/>
</ItemGroup>
<CreateItem Include="@(SubDirectory->'$(RootPath)\%(Identity)')">
<Output TaskParameter="Include" ItemName="FullPath"/>
</CreateItem>
<Message Text="@(FullPath)"/>
</Target>
<Target Name="TestTarget2">
<Message Text="@(FullPath)"/>
</Target>
</Project>
Итак, у меня есть два основных пути, которые уникальны, и в каждом из них у меня есть два каталога с одинаковыми именами в каждом из уникальных путей. В target1 я выполняю пакетную обработку идентификаторов элементов в PathDir, а затем выполняю преобразование элемента SubDirectory, который содержит общие имена папок, найденных в уникальных каталогах, для создания нового элемента, содержащего полные пути. В любом случае, после этого вывод для целей выглядит следующим образом:
Цель 1:
C:\RootDir\UniqueDir1\Common1;C:\RootDir\UniqueDir1\Common2
C:\RootDir\UniqueDir2\Common1;C:\RootDir\UniqueDir2\Common2
Цель 2:
C:\RootDir\UniqueDir1\Common1;C:\RootDir\UniqueDir1\Common2;C:\RootDir\UniqueDir2\Common1;C:\RootDir\UniqueDir2\Common2
Итак, мой вопрос, я думаю, таков: почему target1 отображает только каталоги, содержащие каталог, с которым он объединяется? Я знаю, что это, вероятно, связано с пакетной обработкой, но это все, что я знаю.