6

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

谢谢

4

4 回答 4

4

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

不优雅,但它为我们的场景完成了工作。

于 2009-06-24T16:51:48.037 回答
4

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

赛义德·易卜拉欣·哈希米

我的书:Microsoft Build Engine 内部:使用 MSBuild 和 Team Foundation Build

于 2009-06-24T18:35:17.750 回答
1

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

例子:

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

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

于 2011-04-12T23:41:29.677 回答
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>
于 2016-02-05T12:10:14.103 回答