我想创建一个MSBuild项,其中包含子目录中的所有文件,递归,“node_modules”目录和其他一些目录。
<MyItem Include="MyDir\**\*.*" Exclude="MyDir\node_modules\**\*.*;MyDir\tmp\**\*.*" />
在构建日志中,我看到了:
Input file "MyDir\**\*.*" does not exist.
当我删除“node_modules”目录时,它可以工作。我怀疑MSBuild无法处理它,因为它包含超过30,000个文件和深度子目录结构。有没有办法解决这个问题而不列出我想要包含的所有子目录,这些子目录可能会不时发生变化?
答案 0 :(得分:0)
好的,我想出了另一种使用CreateItems的方法:
<ItemGroup>
<InputDirs Include="MyDir" />
<InputExcludedSubDirs Include="MyDir\tmp;MyDir\node_modules" />
</ItemGroup>
<Target Name="PrepareForMyTarget">
<ItemGroup>
<InputSubDirs Include="$([System.IO.Directory]::GetDirectories("%(InputDirs.Identity)"))" Exclude="@(InputExcludedSubDirs)" />
</ItemGroup>
<CreateItem Include="%(InputSubDirs.Identity)\**\*.*">
<Output TaskParameter="Include" ItemName="Inputs" />
</CreateItem>
</Target>
<Target Name="MyRealTarget" DependsOnTargets="PrepareForMyTarget">
... use Inputs item here as normal ...
</Target>