我有一个 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 只显示包含它正在批处理的目录的目录?我知道这可能与批处理有关,但这就是我所知道的。