2016-08-17 3 views
0

Я могу сжать явный список папок, как это: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\ создаются, почтовый файл New.zip должен быть создан автоматически, без изменения файла MSBuild.)

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

ответ

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%[email protected](AllFoundDirectories,'%0d%0a')"/> 

       <MSBuild.ExtensionPack.Compression.Zip 
        TaskAction="Create" 
        CompressPath="%(AllFoundDirectories.FullPath)" 
        ZipFileName="%(AllFoundDirectories.FullPath)\%(AllFoundDirectories.Filename).zip" /> 

       </Target> 

      </Project> 
+0

Любая идея, если это возможно с задачами сообщества? – Peter