Mit MSBuild mehrere Projektverzeichnisse komprimieren

Als Teil meines Erstellungsprozesses in MSBuild 4.0 erhalte ich die folgende Verzeichnisstruktur:

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

Ich möchte in der Lage sein, eine Zip-Datei pro Unterordner von @ zu erstelle\OutDir. Wenn ich folgendes mache:

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

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

dann wird jeder Unterordner rekursiv gezippt, was für ProjectA und ProjectC gut funktioniert, aber ProjectB hat am Ende zwei Zip-Dateien, eine auf Stammebene und eine auf Unterordnerebene.

Meine andere Anforderung ist, dass die Anzahl der Projekte in der Build-Datei nicht bekannt ist. Ich kann also nicht einfach eine ItemGroup erstellen und die Projekte auflisten, die ich komprimieren möchte.

Diese Aufgabe wäre in NAnt über die foreach-Aufgabe einfach, aber wie kann ich dies in MSBuild erreichen, vorzugsweise ohne auf benutzerdefinierte Aufgaben zurückzugreifen?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage