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