J'ai un peu un projet msbuild qui me fait me demander pourquoi le résultat est tel qu'il est. Ce n'est pas que cela cause un problème ou quoi que ce soit de ce genre, mais j'aimerais essayer de mieux comprendre.MSBuild: Items + Batching + CreateItem + Transforms Question
<?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>
J'ai donc deux voies principales qui sont uniques, et dans chaque j'ai deux répertoires avec les mêmes noms dans chacun des chemins uniques. Dans target1, je procède au traitement par lots de l'identité des éléments dans PathDir, puis à la transformation de l'élément SubDirectory, qui contient les noms de dossiers communs trouvés dans les répertoires uniques, afin de créer un nouvel élément contenant les chemins complets. Donc, de toute façon, après cela, la sortie des cibles est la suivante:
Cible 1:
C:\RootDir\UniqueDir1\Common1;C:\RootDir\UniqueDir1\Common2
C:\RootDir\UniqueDir2\Common1;C:\RootDir\UniqueDir2\Common2
Cible 2:
C:\RootDir\UniqueDir1\Common1;C:\RootDir\UniqueDir1\Common2;C:\RootDir\UniqueDir2\Common1;C:\RootDir\UniqueDir2\Common2
Alors ma question, je suppose ... pourquoi est-ce target1 n'affiche que les répertoires contenant le répertoire avec lequel il est en traitement par lots? Je sais que cela a probablement à voir avec le traitement par lots, mais c'est tout ce que je sais.