Usando o MSBuild para compactar vários diretórios de projeto

Como parte do meu processo de compilação no MSBuild 4.0, acabo com a seguinte estrutura de diretórios:

\OutDir
    \ProjectA
      \File1.dll  
      \File2.dll  
      \File3.exe
    \ProjectB
      \Subfolder1
        File4.html
      \File5.dll  
      \File6.dll  
      \File7.exe
    \ProjectC
      \File8.dll  
      \File9.exe

Quero poder criar um arquivo zip por subpasta de\OutDir. Se eu fizer o seguinte:

<ItemGroup>
  <ZipSource Include="\OutDir\**.*" />
</ItemGroup>

<MSBuild.Community.Tasks.Zip
  Files="@(ZipSource)"
  ZipFileName="OutDir\%(ZipSource.RecursiveDir)ZippedOutput.zip"
  WorkingDirectory="OutDir" />

cada subpasta é zipada recursivamente, o que funciona bem para o ProjectA e o ProjectC, mas o ProjectB termina com dois arquivos zip, um em seu nível raiz e uma em sua subpasta.

Meu outro requisito é que o número de projetos não seja conhecido pelo arquivo de compilação, portanto, não posso apenas criar um ItemGroup e enumerar os projetos que quero compactar.

Essa tarefa seria fácil no NAnt por meio da tarefa foreach, mas como posso fazer isso no MSBuild, de preferência sem recorrer a tarefas personalizadas?

questionAnswers(2)

yourAnswerToTheQuestion