Заархивировать все папки в 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)" />

Это создает два zip-файла Foo.zip и Bar.zip, по одному для каждой папки Foo\ и Bar\.

Как я могу сделать это для всех существующих папок? (Без явного перечисления каждой папки. При создании новой папки New\ zip-файл New.zip должен создаваться автоматически без изменения файла MSBuild.)

(Я использую задачу Zip из MSBuild.Community.Tasks)


person Peter    schedule 17.08.2016    source источник


Ответы (1)


Я не использовал MSBuild.Community.Tasks, но с MSBuild Extension Pack 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>
person Gary Howlett    schedule 17.08.2016
comment
Есть идеи, возможно ли это с помощью задач сообщества? - person Peter; 18.08.2016