【问题标题】:MSBuild fails to find directory with huge sub-directoryMSBuild 找不到具有巨大子目录的目录
【发布时间】:2015-12-11 11:49:01
【问题描述】:

我想创建一个 MSBuild 项,它以递归方式包含子目录中的所有文件,“node_modules”目录和其他一些目录除外。

<MyItem Include="MyDir\**\*.*" Exclude="MyDir\node_modules\**\*.*;MyDir\tmp\**\*.*" />

在构建日志中我看到:

Input file "MyDir\**\*.*" does not exist.

当我删除“node_modules”目录时,它可以工作。我怀疑 MSBuild 无法处理它,因为它包含超过 30,000 个文件和深层子目录结构。有没有一种方法可以在不列出我想要包含的所有子目录的情况下解决这个问题,这些子目录可能会不时更改?

【问题讨论】:

    标签: msbuild


    【解决方案1】:

    好的,我想出了一个方法,使用 CreateItems 来使用另一个目标:

    <ItemGroup>
        <InputDirs Include="MyDir" />
        <InputExcludedSubDirs Include="MyDir\tmp;MyDir\node_modules" />
    </ItemGroup>
    
    <Target Name="PrepareForMyTarget">
        <ItemGroup>
            <InputSubDirs Include="$([System.IO.Directory]::GetDirectories(&quot;%(InputDirs.Identity)&quot;))" 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多