我希望创建一个ItemGroup,它包含给定目录中的所有bin目录(不包括给定子目录中的所有bin目录),例如:
MyDirectory\
bin\
ext\
bin\
lib\
lib1\
bin
samples\
sample1\
bin\
src\
bin\我想删除MyDirectory中的所有bin目录,不包括ext和lib的所有bin目录(即删除samples\sample 1\bin和src\bin)。
这就是我最初想出来的:
<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,这是不起作用的,这就是我想出以下内容的原因:
<ItemGroup>
<ExcludedDirs Include="$(MyDirectory)\ext" />
<ExcludedDirs Include="$(MyDirectory)\lib" />
<BinDirs Include="$([System.IO.Directory]::GetDirectories("$(SolutionDirectory)","bin", SearchOption.AllDirectories))" />
<BinDirs Remove="$(MyDirectory)\%(ExcludedDirs.Identity)\**" />
</ItemGroup>现在所有的bin diretoreis都在BinDirs中,但是ext和lib中的bin目录不排除。解决办法是什么?
发布于 2015-02-09 13:46:53
有以下见解:
因此:首先创建一个不含通配符的排除目录列表:
<ItemGroup>
<_ExcludedDirs Include="ext" />
<_ExcludedDirs Include="lib" />
<ExcludedDirs Include="$([System.IO.Directory]::GetDirectories("$(MyDirectory)\%(_ExcludedDirs.Identity)","bin", SearchOption.AllDirectories))"/>
</ItemGroup>之后,将其用作ItemGroup的排除参数的参数:
<BinDirs Include="$([System.IO.Directory]::GetDirectories("$(SolutionDirectory)","bin", SearchOption.AllDirectories))" Exclude="@(ExcludedDirs)" />希望有人能用这个!
https://stackoverflow.com/questions/28410909
复制相似问题