代码之家  ›  专栏  ›  技术社区  ›  Chris Roberts

使用MSBuild在项目组中创建文件夹列表

  •  32
  • Chris Roberts  · 技术社区  · 15 年前

    我正在尝试在MSBuild脚本中构建一个ItemGroup,该脚本包含一个文件夹列表,直接位于给定的“根”文件夹之下。在这个例子中。。。

    + Root folder
    ---- Sub Folder 1
    -------- Sub-Sub Folder 1
    -------- Sub-Sub Folder 2
    ---- Sub Folder 2
    ---- Sub Folder 3
    

    在层次结构的任何一点上都可能有许多文件,但我只对文件夹感兴趣。

    5 回复  |  直到 13 年前
        1
  •  30
  •   Mark Brackett    12 年前
    <PropertyGroup>
        <RootFolder>tmp</RootFolder>
    </PropertyGroup>
    <ItemGroup>
       <AllFiles Include="$(RootFolder)\**\*"/>
       <OnlyDirs Include="@(AllFiles->'%(Directory)')"/>
    </ItemGroup>
    

    @(OnlyDirs)可能包含重复项,因此您可以使用RemovedUpplicateSTASK:

    <Target Name="foo">
       <RemoveDuplicates Inputs="@(OnlyDirs)">
          <Output TaskParameter="Filtered" ItemName="UniqueDirs"/>
       </RemoveDuplicates>
    </Target>
    

    或将CreateItem与批处理(AllFiles.Identity)一起使用,或与msbuild 3.5一起使用:

    <Target Name="foo">
       <ItemGroup>
          <UniqueDirs Include="%(AllFiles.Directory)"/>
       </ItemGroup>
    </Target>
    
        2
  •  56
  •   Jason Stangroome    13 年前

    <ItemGroup>
      <Folders Include="$([System.IO.Directory]::GetDirectories(&quot;$(RootFolder)&quot;))" />
    </ItemGroup>
    

    属性功能: http://msdn.microsoft.com/en-us/library/dd633440.aspx

        3
  •  6
  •   David Keaveny    14 年前

    这个 MSBuild Extension pack FindUnder

    <MSBuild.ExtensionPack.FileSystem.FindUnder
        TaskAction="FindDirectories"
        Path="$(RootFolder)"
        Recursive="False">
        <Output ItemName="FoundFolders" TaskParameter="FoundItems" />
    </MSBuild.ExtensionPack.FileSystem.FindUnder>
    
        4
  •  6
  •   Shahyad Sharghi    12 年前

    <PropertyGroup>
         <RootFolder>tmp</RootFolder>
    </PropertyGroup>
    <ItemGroup>
        <AllFiles Include="$(RootFolder)\**\*"/>
        <OnlyDirs Include="@(AllFiles->'%(RootDir)%(Directory)'->Distinct())"/>
    </ItemGroup>
    
        5
  •  3
  •   Ruben Bartelink    14 年前