2015-02-09 2 views
0

Я хочу создать ItemGroup всех bin каталогов в заданной директории, исключая все bin каталогов в заданных подкаталогах, например:Удалить каталог из MSBuild ItemGroup

MyDirectory\ 
    bin\ 
    ext\ 
    bin\ 
    lib\ 
    lib1\ 
     bin 
    samples\ 
    sample1\ 
     bin\ 
    src\ 
    bin\ 

Я хочу, чтобы удалить все бинов каталогов в MyDirectory, исключая все каталоги bin для файлов ext и lib (т. е. delete samples \ sample1 \ 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(&quot;$(SolutionDirectory)&quot;,&quot;bin&quot;, SearchOption.AllDirectories))" /> 
    <BinDirs Remove="$(MyDirectory)\%(ExcludedDirs.Identity)\**" /> 
</ItemGroup> 

Теперь все бин diretoreis являются в BinDirs, однако, каталоги bin в ext и lib равны , а не исключены. Какое решение?

ответ

1

Получили следующие идеи:

  • Удалить ItemGroup является не в состоянии работать с групповыми символами в каталогах
  • Существует Исключить параметр, однако, он не поддерживает подстановочные знаки в каталогах, а также

Поэтому: Создание подстановочных свободного списка исключенных каталогов первый:

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

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

Затем использовать его в качестве аргумента для параметра Exclude ItemGroup в:

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

Надежда кто-то может использовать это!

Смежные вопросы