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?