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?