Ich habe dieses Bit eines Msbuild-Projekts, das mich fragt, warum es das Ergebnis ist, wie es ist. Nicht, dass es ein Problem oder etwas Ähnliches verursacht, aber ich würde versuchen, es besser zu verstehen. SoMSBuild: Artikel + Batching + CreateItem + Transforms Frage
<?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>
Ich habe zwei Hauptwege, die einzigartig sind und in jedem Ich habe zwei Verzeichnisse mit den gleichen Namen in jeder der einzigartigen Wege. In target1 binde ich mit der Identität der Elemente in PathDir und führe anschließend eine Transformation für das Element SubDirectory durch, das die allgemeinen Ordnernamen in den eindeutigen Verzeichnissen enthält, um ein neues Element zu erstellen, das die vollständigen Pfade enthält. So irgendwie, danach ist der Ausgang für die Ziele wie folgt:
Ziel 1:
C:\RootDir\UniqueDir1\Common1;C:\RootDir\UniqueDir1\Common2
C:\RootDir\UniqueDir2\Common1;C:\RootDir\UniqueDir2\Common2
Target 2:
C:\RootDir\UniqueDir1\Common1;C:\RootDir\UniqueDir1\Common2;C:\RootDir\UniqueDir2\Common1;C:\RootDir\UniqueDir2\Common2
Also meine Frage, die ich denke, ist ... warum tut target1 zeigt nur die Verzeichnisse an, in denen das Verzeichnis liegt, gegen das es stapelbar ist? Ich weiß, dass es wahrscheinlich mit dem Dosieren zu tun hat, aber das ist alles was ich weiß.