我需要根据一组动态目录查找文件。这是我的共享构建脚本:
<ItemGroup>
<LookupDirs Include="F:\Dir1" />
<LookupDirs Include="F:\Dir2" />
<LookupDirs Include="F:\Dir3" />
<LookupDirs Include="@(AdditionalLookupDirs)" />
</ItemGroup>
<!-- This doesn't work. -->
<ItemGroup>
<Files Include="%(LookupDirs.Identity)\*.ext" />
</ItemGroup>
<Target Name="FilesByBatchingLookupDirs">
<Message Text="Files: %(Files.Identity)" />
<!-- This works. --->
<ItemGroup>
<TargetFiles Include="%(LookupDirs.Identity)\*.ext" />
</ItemGroup>
<Message Text="TargetFiles: %(TargetFiles.Identity)" />
</Target>
目的是让使用构建脚本的人通过AdditionalLookupDirs
项目组指定自己的自定义查找目录,然后在查找目录上批处理以查找一组文件。
如果Files
项目组不在目标范围内,我更喜欢它,因此我可以简单地创作并且不必记住调用创建Files
的目标项目组。不幸的是,看起来这是不可能的。我只能通过在Files
中批量处理LookupDirs
项目组来创建Target
项目组。
是否可以通过批量处理Target
之外的现有项目组来创建新的项目组?
答案 0 :(得分:1)
不,我不相信你可以,但你可以使用InitialTargets
。我通常有一个Init
目标,因为我无法添加&#34;全球&#34;目标之外的元数据或更高级或延迟的数据输入。
<Project InitialTargets="Init;FilesByBatchingLookupDirs" DefaultTargets="Foo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<LookupDir Include="$(ProgramW6432)\Microsoft SQL Server\100\Tools\Binn" />
<LookupDir Include="$(ProgramW6432)\Microsoft SQL Server\110\Tools\Binn" />
<LookupDir Include="$(ProgramW6432)\Microsoft SQL Server\120\Tools\Binn" />
</ItemGroup>
<Target Name="Init">
<ItemGroup>
<LookupDir>
<Foo>Bar</Foo>
</LookupDir>
</ItemGroup>
<Message Text="%(LookupDir.Identity) %(Foo)" />
</Target>
<Target Name="FilesByBatchingLookupDirs">
<ItemGroup>
<Files Include="%(LookupDir.FullPath)\**\*.exe" />
</ItemGroup>
</Target>
<Target Name="Foo" DependsOnTargets="FilesByBatchingLookupDirs">
<Message Text="%(Files.Identity)" />
</Target>
</Project>