gpt4 book ai didi

.net - 使用 MSBuild 压缩多个项目目录

转载 作者:行者123 更新时间:2023-12-01 02:54:37 24 4
gpt4 key购买 nike

作为我在 MSBuild 4.0 中构建过程的一部分,我最终得到以下目录结构:

\OutDir
\ProjectA
\File1.dll
\File2.dll
\File3.exe
\ProjectB
\Subfolder1
File4.html
\File5.dll
\File6.dll
\File7.exe
\ProjectC
\File8.dll
\File9.exe

我希望能够为 \OutDir 的每个子文件夹创建一个 zip 文件.如果我执行以下操作:
<ItemGroup>
<ZipSource Include="\OutDir\**.*" />
</ItemGroup>

<MSBuild.Community.Tasks.Zip
Files="@(ZipSource)"
ZipFileName="OutDir\%(ZipSource.RecursiveDir)ZippedOutput.zip"
WorkingDirectory="OutDir" />

然后每个子文件夹被递归压缩,这对 ProjectA 和 ProjectC 工作正常,但 ProjectB 最终有两个 zip 文件,一个是根级别,一个是子文件夹。

我的另一个要求是构建文件不知道项目的数量,所以我不能只创建一个 ItemGroup 并枚举我想要压缩的项目。

这个任务在 NAnt 中通过它的 foreach 任务很容易,但是我怎样才能在 MSBuild 中实现这一点,最好不要求助于自定义任务?

最佳答案

我想出了一个解决方法 - MSBuild 扩展包的 FileUnder 任务的组合,以枚举我想要压缩的 ProjectX 文件夹,以及调用 7Zip 的 Exec 任务。代码是:

<MSBuild.ExtensionPack.FileSystem.FindUnder
TaskAction="FindDirectories"
Path="$(WebOutputFolder)"
Recursive="False">
<Output ItemName="WebsiteFolders" TaskParameter="FoundItems" />
</MSBuild.ExtensionPack.FileSystem.FindUnder>

<Exec Command="7za.exe a -r %22$(OutDir)%(WebsiteFolders.Filename)-$(Configuration)-$(AssemblyFileVersion).zip%22 %22@(WebsiteFolders)\*%22" />

所以现在每个 zip 文件都以其内容来自的文件夹命名(以及配置和版本控制细节),所以我将在我的输出文件夹中有名为 ProjectA-Debug-0.1.2.345.zip 等的文件。

关于.net - 使用 MSBuild 压缩多个项目目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3491308/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com