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>
Другие вопросы по тегам