MSBuild:通过Zip / Copy任务添加/复制空文件夹

时间:2009-06-24 15:59:25

标签: .net msbuild build-automation zip msbuildcommunitytasks

我正在尝试创建一个包含空文件夹(预编译后)的预编译站点的副本/ zip。在CreateItem任务之后,看起来空文件夹不包含在项目列表中。 我如何关心空文件夹?

感谢

4 个答案:

答案 0 :(得分:4)

我不认为这是最优雅的解决方案,但我们之前所做的是,在解决方案中创建一个文件夹,以及一个名为placeholder.txt或类似的文本文件,并设置其属性要包含在构建中的文本文件。结果是一个文件夹,您希望它包含您不想要的文件。然后,我们在压缩之前删除placeholder.txt文件,所有这些都在构建脚本中。

不优雅,但它可以完成我们的工作。

答案 1 :(得分:4)

创建项目时,MSBuild不会拾取空文件夹。如果您希望能够将空文件夹放入项目中,则必须使用任务(如MSBuild Extension Pack中的FindUnder任务)。

Sayed Ibrahim Hashimi

我的书:Inside the Microsoft Build Engine : Using MSBuild and Team Foundation Build

答案 2 :(得分:1)

对于只复制空文件夹,您可以使用exec任务来调用RoboCopy。您可以指定参数/ MIR,它将镜像您要复制的整个树,包括空文件夹。

示例:

<Exec Command="robocopy &quot;$(SourceLocation)\&quot; &quot;$(TargetLocation)\&quot; /MIR" IgnoreExitCode="true" />

类似地,您可以使用exec任务来调用具有命令行界面的压缩实用程序,以实现具有空文件夹的zip。

答案 3 :(得分:0)

这可能有点棘手,但我认为如果您的所有文件和文件夹都在一个公共根目录中并且您在不使用通配符的情况下压缩该根文件夹(仅使用'。'),它就会起作用:

<PropertyGroup>
    <SourcePath>.\path\to\rootFolder</SourcePath>
    <FinalZipFileName>.\path\to\destination\myzip.zip</FinalZipFileName>
</PropertyGroup>

<Target Name="MyApplicationZip" >
    <Zip ZipFileName="$(FinalZipFileName)" WorkingDirectory="$(SourcePath)" Files="$(SourcePath)\." ZipLevel="9" />
</Target>