【发布时间】:2009-06-24 15:59:24
【问题描述】:
我正在尝试复制/压缩一个包含空文件夹的预编译站点(预编译后)。看起来空文件夹不包含在 CreateItem 任务之后的项目列表中。 我该如何处理空文件夹?
谢谢
【问题讨论】:
标签: .net msbuild build-automation zip msbuildcommunitytasks
我正在尝试复制/压缩一个包含空文件夹的预编译站点(预编译后)。看起来空文件夹不包含在 CreateItem 任务之后的项目列表中。 我该如何处理空文件夹?
谢谢
【问题讨论】:
标签: .net msbuild build-automation zip msbuildcommunitytasks
我不觉得这是最优雅的解决方案,但是我们之前所做的是,在解决方案中创建一个文件夹,以及一个名为 placeholder.txt 或类似的文本文件,并设置要包含在构建中的文本文件。结果是您想要的文件夹,其中包含您不想要的文件。然后,我们在压缩之前删除 placeholder.txt 文件,所有这些都在构建脚本中。
不优雅,但它可以满足我们的场景。
【讨论】:
MSBuild 在创建项目时不会拾取空文件夹。如果您希望能够将空文件夹放入项目中,则必须使用任务(例如 MSBuild Extension Pack 中的 FindUnder 任务)。
赛义德·易卜拉欣·哈希米
我的书:Inside the Microsoft Build Engine : Using MSBuild and Team Foundation Build
【讨论】:
对于仅复制空文件夹,您可以使用 exec 任务调用 RoboCopy。您可以指定参数 /MIR,它将镜像您尝试复制的整个树,包括空文件夹。
例子:
<Exec Command="robocopy "$(SourceLocation)\" "$(TargetLocation)\" /MIR" IgnoreExitCode="true" />
同样,您可以使用 exec 任务调用具有命令行界面的压缩实用程序来实现空文件夹的 zip。
【讨论】:
这可能有点棘手,但我认为如果您的所有文件和文件夹都在一个公共根目录中并且您在不使用通配符的情况下压缩该根文件夹(仅使用“.”),那么它会起作用:
<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>
【讨论】: