Zip все папки в MSBuild
Я могу заархивировать явный список папок следующим образом:
<ItemGroup>
<Folder Include="Foo\**\*.*"><Name>Foo</Name></Folder>
<Folder Include="Bar\**\*.*"><Name>Bar</Name></Folder>
</ItemGroup>
<Zip
ZipFileName="%(Folder.Name).zip"
WorkingDirectory="%(Folder.Name)\"
Files="@(Folder)" />
Это создает два архива Foo.zip
а также Bar.zip
по одному на каждую папку Foo\
а также Bar\
,
Как я могу сделать это для всех существующих папок? (Без указания каждой папки явно. Когда новая папка New\
создан, файл zip New.zip
должен быть создан автоматически без изменения файла MSBuild.)
(Я использую задачу Zip из MSBuild.Community.Tasks)
1 ответ
Я не использовал MSBuild.Community.Tasks, но с пакетом расширений MSBuild 4.0.12.0 я думаю, что это даст вам то, что вы хотели бы... изменить путь $(MSBuildProjectDirectory) туда, куда вам нужно заархивировать.
<?xml version="1.0" encoding="utf-8" ?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="14.0">
<Import Project="$(MSBuildExtensionsPath)\ExtensionPack\4.0\MSBuild.ExtensionPack.tasks" />
<PropertyGroup>
<BuildDependsOn>
$(BuildDependsOn);
ZipFiles;
</BuildDependsOn>
</PropertyGroup>
<Target Name="ZipFiles">
<MSBuild.ExtensionPack.FileSystem.FindUnder
TaskAction="FindDirectories"
Path="$(MSBuildProjectDirectory)\..\"
Recursive="false">
<Output ItemName="AllFoundDirectories" TaskParameter="FoundItems"/>
</MSBuild.ExtensionPack.FileSystem.FindUnder>
<Message Text="===== Found Directories =====" Importance="high"/>
<Message Text="AllFoundDirectories:%0d%0a@(AllFoundDirectories,'%0d%0a')"/>
<MSBuild.ExtensionPack.Compression.Zip
TaskAction="Create"
CompressPath="%(AllFoundDirectories.FullPath)"
ZipFileName="%(AllFoundDirectories.FullPath)\%(AllFoundDirectories.Filename).zip" />
</Target>
</Project>