如何在MSBuild中压缩文件夹?

5
我该如何在MSBuild中压缩输出文件夹?对于文件名,我需要使用其他地方设置的变量。
2个回答

7
"

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

但您可以在下面了解其含义。

以下内容将获取所有不是.config文件的文件以进行压缩。

请注意,“Host”是我的自定义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


4
如果你想打包所有文件并且不保留文件夹结构。
<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文件的基础目录。所有文件将相对于工作目录进行处理。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接