压缩内容而不保留文件夹结构

时间:2017-02-10 14:11:31

标签: msbuild

我正在开发自定义的msbuild脚本。 其中一个目标应该压缩构建输出。 为了举例,我们在这里说出输出路径

C
-Folder
-------bin
----------Debug

我有跟随MsBuild目标

    <Target Name="ZipFiles">
        <ItemGroup>
          <Binaries Include="$(MSBuildProjectDirectory)\Folder\bin\Debug\**" />
        </ItemGroup>   

        <MakeDir Directories="$(MSBuildProjectDirectory)\Build\Output"
                 Condition="!Exists('$(MSBuildProjectDirectory)\Build\Output')" />

        <Zip Files="@(Binaries)"
             WorkingDirectory="$(MSBuildProjectDirectory)\Build\Output\"
             ZipFileName="$(MSBuildProjectDirectory)\Build\Output\MyItems.zip"
             ZipLevel="9" />
    </Target>

我使用**通配符选择Debug下的内容。我可能在路径中有一些内容文件的文件夹结构,需要保留。

例如,Resources下可能有Debug个文件夹,其中包含一些.txt个文件。这些应该是压缩保留结构,以便最终的.zip存档文件包含Resources文件夹及其内容。

脚本我创建了一个保留完整文件夹结构的MyItem.zip文件,所以我最终在.zip文件中跟随

Folder
------bin
---------Debug
--------------Contents

我想要实现的是在.zip文件中保存Debug的内容,而保留文件夹结构直到Debug(不包括)。 所以我希望以。

结束.zip文件
    MyItem.zip
    ----------Content Folders (for example Resources)
    -------------------------Content Files
    ----------Files

有没有优雅的方法呢?

我更不希望使用任何自定义PowerShell脚本,如果可能,请使用MsBuild +社区任务提供的内容。

1 个答案:

答案 0 :(得分:1)

请参阅source,它充当社区任务的文档:

/// <summary>
/// Gets or sets the working directory for the zip file.
/// </summary>
/// <value>The working directory.</value>
/// <remarks>
/// The working directory is the base of the zip file.  
/// All files will be made relative from the working directory.
/// </remarks>
public string WorkingDirectory { get; set; }

因此,如果您指定了工作目录,它将用于确定内容的“起点”,在您的情况下应该

$(MSBuildProjectDirectory)\Folder\bin\Debug