2017-02-10 56 views
0

我正在处理自定义的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下的内容的MSBuild目标的路径,输出

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

。我可能有一些文件夹结构,其内容文件位于路径下,需要保留。

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

剧本我创建了保存完整的文件夹结构的MyItem.zip文件,所以我结束了在.zip文件下列

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

我想实现的是在调试的内容.zip文件没有保留文件夹结构直到调试(不包括)。 所以,我希望有.zip文件,结束了以下

MyItem.zip 
    ----------Content Folders (for example Resources) 
    -------------------------Content Files 
    ----------Files 

是否有任何优雅的方式来做到这一点?

我宁愿不使用任何自定义的PowerShell脚本,并且如果可能的话,请使用MsBuild +社区任务提供的功能。

+0

从文档:“工作目录是ZIP文件的基本所有文件都会被从工作目录亲属提出的。”听起来像你的问题?尝试离开工作目录,或将其设置为'$(MSBuildProjectDirectory)\ Folder \ bin \ Debug' – stijn

+1

@stijn就是这种情况!谢谢,作品像魅力!你能否把它作为答案张贴,以便我可以标记它。 – Michael

回答

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; } 

所以,如果你指定它会被用来确定的内容和你的情况“出发点”应该是workingdirectory

$(MSBuildProjectDirectory)\Folder\bin\Debug

相关问题