如何在MSBuild中压缩文件夹?

时间:2013-04-10 05:39:11

标签: msbuild

如何在MSBuild中压缩输出文件夹?对于文件名,我需要使用一个在别处设置的变量。

2 个答案:

答案 0 :(得分:6)

“MSBuild.Community.Tasks.Zip”是一种方式。 未定义WorkingCheckout和OutputDirectory。

但你可以得到以下的漂移。

以下将获取我的zip文件中不是.config文件的所有文件。

注意“主机”是我的自定义csproj文件夹名称,您的不同。

<ItemGroup>
    <ZipFilesHostNonConfigExcludeFiles Include="$(WorkingCheckout)\Host\bin\$(Configuration)\**\*.config" />
</ItemGroup>
<!-- -->
<ItemGroup>
    <ZipFilesHostNonConfigIncludeFiles Include="$(WorkingCheckout)\Host\bin\$(Configuration)\**\*.*" Exclude="@(ZipFilesHostNonConfigExcludeFiles)" />
</ItemGroup>
<MSBuild.Community.Tasks.Zip Files="@(ZipFilesHostNonConfigIncludeFiles)" ZipFileName="$(OutputDirectory)\MyZipFileNameHere_$(Configuration).zip" WorkingDirectory="$(WorkingCheckout)\Host\bin\$(Configuration)\" />
<!-- -->

这是另一个主流选项:

http://msbuildextensionpack.codeplex.com/discussions/398966

答案 1 :(得分:1)

如果要打包所有文件并且不保留文件夹结构。

<ItemGroup>
  <ZipFiles Include="$(OutDir)\**\*.*" />
</ItemGroup>
<Target Name="AfterBuild" Condition="'$(Configuration)'=='Release'">
  <Zip ZipFileName="$(OutDir)\output.zip" WorkingDirectory="$(OutDir)" Files="@(ZipFiles)" Flatten="True" Quiet="true" />
</Target>

如果要保留文件夹结构

<Target Name="AfterBuild" Condition="'$(Configuration)'=='Release'">
  <Zip ZipFileName="$(OutDir)\output.zip" WorkingDirectory="$(OutDir)" Files="@(ZipFiles)" Flatten="False" Quiet="true" />
</Target>

Flatten =“ True” 意味着将删除所有目录,并将文件放置在zip文件的根目录中。

WorkingDirectory 是zip文件的基础。所有文件都将在工作目录中成为相对文件。