从MSBuild项目组中删除目录

从MSBuild项目组中删除目录,msbuild,Msbuild,我想创建一个包含给定目录中所有bin目录的项目组,不包括给定子目录中的所有bin目录,例如: MyDirectory\ bin\ ext\ bin\ lib\ lib1\ bin samples\ sample1\ bin\ src\ bin\ 我想删除MyDirectory中的所有bin目录,不包括ext和lib的所有bin目录(即删除samples\sample1\bin和src\bin) 这是我最初想到的: &l

我想创建一个包含给定目录中所有
bin
目录的项目组,不包括给定子目录中的所有
bin
目录,例如:

MyDirectory\
  bin\
  ext\
    bin\
  lib\
    lib1\
      bin
  samples\
    sample1\
      bin\
  src\
    bin\
我想删除MyDirectory中的所有bin目录,不包括ext和lib的所有bin目录(即删除samples\sample1\bin和src\bin)

这是我最初想到的:

<ItemGroup>
  <ExcludedDirs Include="$(MyDirectory)\ext" />
  <ExcludedDirs Include="$(MyDirectory)\lib" />

  <BinDirs Include="$(MyDirectory)\**\bin" />
  <BinDirs Remove="$(MyDirectory)\%(ExcludedDirs.Identity)\**" />
</ItemGroup>

这不起作用,因此我提出以下建议:

<ItemGroup>
  <ExcludedDirs Include="$(MyDirectory)\ext" />
  <ExcludedDirs Include="$(MyDirectory)\lib" />

  <BinDirs Include="$([System.IO.Directory]::GetDirectories(&quot;$(SolutionDirectory)&quot;,&quot;bin&quot;, SearchOption.AllDirectories))" />
  <BinDirs Remove="$(MyDirectory)\%(ExcludedDirs.Identity)\**" />
</ItemGroup>


现在所有bin diretoreis都在BinDirs中,但是ext和lib中的bin目录并不排除在外。解决方案是什么?

有以下见解:

  • ItemGroup的Remove无法使用目录上的通配符
  • 有一个Exclude参数,但是,它也不支持目录上的通配符
因此:首先创建排除目录的无通配符列表:

<ItemGroup>
  <_ExcludedDirs Include="ext" />
  <_ExcludedDirs Include="lib" />

  <ExcludedDirs Include="$([System.IO.Directory]::GetDirectories(&quot;$(MyDirectory)\%(_ExcludedDirs.Identity)&quot;,&quot;bin&quot;, SearchOption.AllDirectories))"/>
</ItemGroup>

然后将其用作ItemGroup的Exclude参数的参数:

<BinDirs Include="$([System.IO.Directory]::GetDirectories(&quot;$(SolutionDirectory)&quot;,&quot;bin&quot;, SearchOption.AllDirectories))" Exclude="@(ExcludedDirs)" />

希望有人能用这个