私は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>
したがって、一意の2つのメインパスがあり、それぞれの中に、それぞれの一意のパスに同じ名前の2つのディレクトリがあります。target1では、PathDir内のアイテムのIDに対してバッチ処理を行ってから、一意のディレクトリにある共通のフォルダー名を含むアイテム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はそれがバッチ処理しているディレクトリを含むディレクトリだけを表示するのですか?おそらくバッチ処理に関係していることはわかっていますが、私が知っているのはそれだけです。