首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从MSBuild ItemGroup删除目录

从MSBuild ItemGroup删除目录
EN

Stack Overflow用户
提问于 2015-02-09 13:28:23
回答 1查看 1K关注 0票数 0

我希望创建一个ItemGroup,它包含给定目录中的所有bin目录(不包括给定子目录中的所有bin目录),例如:

代码语言:javascript
复制
MyDirectory\
  bin\
  ext\
    bin\
  lib\
    lib1\
      bin
  samples\
    sample1\
      bin\
  src\
    bin\

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

这就是我最初想出来的:

代码语言:javascript
复制
<ItemGroup>
  <ExcludedDirs Include="$(MyDirectory)\ext" />
  <ExcludedDirs Include="$(MyDirectory)\lib" />

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

由于MSBuild - ItemGroup of all bin directories within subdirectories,这是不起作用的,这就是我想出以下内容的原因:

代码语言:javascript
复制
<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目录不排除。解决办法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-09 13:46:53

有以下见解:

  • ItemGroup的Remove无法在目录上使用通配符
  • 有一个排除参数,但是它也不支持目录上的通配符。

因此:首先创建一个不含通配符的排除目录列表:

代码语言:javascript
复制
<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的排除参数的参数:

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

希望有人能用这个!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28410909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档