gpt4 book ai didi

ruby - 如何编写仅包含特定文件夹和文件夹本身的 Albacore zip 任务?

转载 作者:数据小太阳 更新时间:2023-10-29 07:00:32 26 4
gpt4 key购买 nike

我正在尝试使用 Albacore 的 ZipTask 压缩 rake 构建的工件.我正在构建的解决方案包含三个项目,这些项目的工件需要单独压缩,但这里只提及 ASP.NET MVC 项目。这是解决方案的目录结构:

rakefile.rb
solution.sln
src/
(other projects that are not relevant)
website/
(various folders I don't want included in the artifacts)
bin/
Content/
Scripts/
Views/
Default.aspx
Global.asax
web.config

起初我写了这个任务:

website_directory = File.join '.', 'src', 'website'
website_project_name = 'website'

zip :zip => [ :run_unit_tests, :less ] do |zip|
zip.directories_to_zip = [ 'bin', 'Content', 'Scripts', 'Views' ].map{ |folder| File.join website_directory, folder }
zip.additional_files = [ 'Default.aspx', 'favicon.ico', 'Global.asax', 'web.config'].map{ |file| File.join website_directory, file }
zip.output_file = get_output_file_name
zip.output_path = get_artifacts_output_path website_project_name
end

问题是,此任务的输出是一个包含这些文件夹内容的 zip 文件,而不是文件夹本身,这显然是不可取的。

接下来,我尝试将 flatten_zip 字段翻转为 false(这不是记录的字段,但您可以在 the source 中找到它)。这产生了一个包含上述文件夹的 zip,但位于整个 ./src/website/ 文件夹层次结构的底部。我想将上述文件夹放在 zip 的根目录下,所以这也不起作用。

所以我的下一个镜头是这样的,使用 exclusions,这也没有记录:

zip :zip => [ :run_unit_tests, :less ] do |zip|
zip.directories_to_zip website_directory
zip.exclusions = [ /.git/, /.+\.cs/, /App_Data/, /Attributes/, /AutoMapper/, /Controllers/, /Diagrams/, /Extensions/, /Filters/, /Helpers/, /Models/, /obj/, /Properties/, /StructureMap/, /Templates/, /CompTracker.Web.csproj/, /Default.aspx.cs/, /Global.asax.cs/, /Publish.xml/, /pdb/ ]
zip.output_file = get_output_file_name
zip.output_path = get_artifacts_output_path website_project_name
end

这对我有用,但是当我最近将 /AutoMapper//StructureMap/ 添加到 exclusions 数组时,它也导致了 AutoMapper .dll 和 StructureMap.dll(当然)也从 bin 文件夹中排除。

我应该如何编辑上述任何任务,以便在我的 zip 根目录中只包含我想要的文件夹和文件?

最佳答案

您可以将所需的所有文件和文件夹复制到一个临时目录中,然后将其压缩。换句话说,将属性 directories_to_zip 设置为一个文件夹,其中已经复制了所有正确的文件 - 其中 copying code 是为您执行所有过滤的。我认为这是未指定的预期用途(以及我使用它的方式)。我只是将这两个想法进行对比以使其清楚。

策略A:复制文件夹结构

将您需要的内容复制到一个临时目录中。这样,您就可以将“directories_to_zip”属性设置为一个文件夹,例如:

directories_to_zip = 'ziptemp/all.my.stuff.copied.here/'

策略B:使用过滤器

(这是您当前的策略)

使用 directories_to_zip 属性作为原始目录的过滤器(它是一个包含多个目录的数组,因此您不能因为假设它应该以这种方式工作而受到指责)。然后,您可以使用各种属性来过滤所需的文件/文件夹。

可能的解决方案

然后,要解决您的问题,您可以采用策略 A。实际上,除非这有任何特别的问题(PC 速度慢,磁盘空间极低),否则我认为这会是一种稍微更稳健的方法因为您可以确定您正在压缩的内容正是您正在复制的内容,这可以通过检查 ziptemp 目录来验证。

顺便说一句,我可以确定策略 A 有效,因为我使用它(与 Albacore)为我们的安装程序压缩文件。

关于ruby - 如何编写仅包含特定文件夹和文件夹本身的 Albacore zip 任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3151887/

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