音效素材网提供各类素材,打造精品素材网站!

站内导航 站长工具 投稿中心 手机访问

音效素材

asp.net 专业源代码打包工具
日期:2021-09-07 21:22:27   来源:脚本之家

不过,有些人做事比较马虎,经常就是直接将VS生成的解决方案目录直接打包,这样就会包含大量垃圾文件,诸如:obj目录下的所有文件,而且有时bin目录还有二个目录,PDB文件有二份,甚至连xxx.vshost.exe文件也有二份!更让人无语的是,有些人用SVN这种源代码管理软件,每个目录还有个.svn目录!

这种做法显然很容易将一个不大的项目搞成一个比较大的压缩包,这种压缩包一旦做好,上传也慢,人家下载也慢,还会浪费许多服务器资源,下载到这种压缩包,只能让人无语了。没办法,有些人就是很懒,而且那些压缩软件也不懂这是个源代码目录,反正是见文件就压缩!虽然很悲剧,但悲剧却一直在重复上演!现实就是这样,估计有些人已经麻木了!

我是个追求完美的人,自然是不希望让悲剧在我这里重复上演。我不希望浪费我的上传时间,不希望浪费服务器的硬盘资源,不希望浪费服务器的带宽,也不希望浪费所有网友的下载时间,更不希望有人会因此而骂我。因此我每次做出来的压缩包是不包含那些垃圾文件的。我是如何做的呢?很简单啊,不要把一些垃圾文件打包进去不就好了吗?还要怎样?

不过,我也很理解一些懒人,每次打包前去把这些文件找出来,删除它们,也是有些麻烦。当然了,我也不愿意每次都做这种机械的事情,我也想偷懒。

嗯,既然打包前删除这些垃圾文件是件机械的事情,那么能不能搞个程序去做呢,我是程序员啊。

终于有一天,我也受不了了,尤其是我平时喜欢写点小东西,每天改了之后要备份,也要用压缩包,但我不想浪费硬盘空间啊。在一次一次地被那些压缩软件折磨后,我还是选择自己来设计一个工具来专门解决这个问题。不就是个压缩的事情不好解决嘛,那我就自己做吧,反正现在的压缩类库是一大把,不过,我最终还是选择了Windows自带的FCI/FDI接口,它能直接生成cab格式的压缩包,且现在流行的各种压缩软件都能支持它。选择它还有其它原因:1.我早在使用C#之前就已经使用过它了,有现成的包装库(C语言版的,速度还不错),2.由于是Windows自带的接口,因此不需要引入额外的组件,工具可以保持较小的体积, 3.cab算法的压缩率还不错,比zip要好(与rar相当,比7z差点)。

今天,我将向大家推荐一个我几乎天天在用的工具。它能很完美的解决以上问题,它还有其它功能,我也非常喜欢它。下面,我就来介绍此工具。

记住哦,这个工具的名字叫:FishCabTool

工具介绍

来看看我的工具吧,总共由4个文件组成:

虽然是4个文件,但依然很小,离300K还有些距离哦。下面来依次介绍这4个文件的用途:

1. FishCabToolHelp.chm,它是一个帮助文件,介绍了工具的特色功能,操作方式,以及其它说明:

2. FishCabTool.exe,它是这个工具的主程序了,是一个WinForm程序,运行界面如下:

通常,并不需要直接运行它,而是从资源管理器的上下文菜单中启动它,操作方式与现今流行的压缩软件一样,如下图。

3. FishCabToolExt.dll,它是一个Windows资源管理器的插件,可以让我的工具也能像一些压缩软件一样,直接在Windows资源管理器的右键菜单中操作,如下图:

为了不影响操作体验,这个插件采用ATL的方式实现,因此速度还是很不错的。说到速度,再给个具体的数据吧:当年在开发这个工具时,是在一台(02年的)老机器上进行的,由于机器配置较差,所以性能相当敏感。测试时我选择Windows/System32文件夹下的所有文件,右击鼠标并测量菜单出现的时间,WinRar V2.6花了27秒,7z V4.x花了差不多8秒,我的工具还不到3秒。所以,不要担心这个插件的会影响您的机器性能。

说明:FishCabToolExt.dll采用Unicode方式编写,所以理论上即使不是简体中文的Windows下也能正常显示汉字。

4. FishCabLibU.dll,它是一个包装层,用于封装Windows的FCI/FDI接口,因为这二个接口是基于C的,且接口较为复杂,我也只好用C来封装了,并以标准的导出函数提供给其它编程语言调用。导出的API函数如下图:

在写这篇博客时,看到当年给这些API取的名字,我也郁闷了:这些名字也太乱了吧。哎,2004年咱的命名规范还真差劲啊。

FCI/FDI是Windows的文件压缩接口/文件解压缩接口的简称。它提供了操作CAB压缩包的具体实现算法,该接口涉及一大堆C风格的回调函数。
微软提供的关于此接口的SDK文档:点击此处下载(微软的网站上找不到了,遗憾中)

我封装的接口是一种简化版本,各个API函数已经是简单的数据类型,因此使用起来会比较容易,且提供Unicode和非Unicode二套API,如果您也对cab格式感兴趣,并希望使用我的FishCabLibU.dll,请回复,我可以提供C#版本的包装类。
功能介绍
正如本文前面的帮助文件截图所示,这个小工具有以下功能:

1. 专为备份源代码而设计,可以选择性地排除源代码目录中一些不需要备份的文件。
如:obj目录及.pdb和其它源代码版本控制信息之类的“垃圾”文件。
具体哪些文件不需要在压缩时加入压缩包,程序提供如下的设置界面来控制

2. 操作方式和现今流行的压缩软件一致,直接在资源管理器的右键菜单中操作。
前面在介绍FishCabToolExt.dll时已有说明,这里再次引用那二张图片:

3. 生成的压缩包采用cab的压缩格式,兼容现今流行的各类压缩软件。
cab格式其实早就存在了,至少也有15年以上历史。此文件格式由微软开发,且在微软的很多安装包中都在使用这种格式。由于历史悠久,且文件格式公开,因此现今流行的各类压缩软件都支持它。
注意:WinRar对cab的支持不够好,如果cab采用UTF-8编码方式创建包内文件名,在WinRar中将会看到乱码。而7z就没有问题,当然了,我的工具也能正确地解包。

4. 压缩包的文件名包含当天的操作日期,便于版本管理及日后查找。
前面说到我平时喜欢在业余时间写点小工具或者小项目,自然就会面对源代码的版本管理问题。但我却不想为此而安装一个庞大的源代码管理软件,感觉完全没有必要。通常就是直接把项目目录打包,然后在文件名上添加当天日期。正是由于这个原因,这个工具会自动根据目录名称以及当天日期,生成一个合适的压缩包文件名。可以参见前面程序的主界面截图。说明:按F12可以去掉文件名中的日期部分。

5. 更灵活的备份选择,可以将多个目录及多个分区中的某些目录或文件压缩到一个压缩包中。
我的工具还可以将来自于不同磁盘分区的文件打包在一个压缩文件中。操作方法也很简单:直接将需要压缩的文件或者文件夹拖动主窗口中即可,如下图:

程序生成的压缩包用7z打开的界面如下:

6. 可以方便地获取一个目录或文件的完整路径名。
FishCabToolExt.dll中还有一个我经常用到的功能就是:当您在右击一个文件或者文件夹时,可以非常方便地获取它的所在全路径。效果图前面有,请参考前文。

7. 可以方便地从任何目录打开命令行窗口。
我比较喜欢用Windows Server 2003,可是每当以命令行方式执行一些任务时,都要打开【运行】窗口,输入【cmd】后,再切换路径,太麻烦了。 FishCabToolExt.dll中有个功能就可以很轻松地解决这个繁琐的过程。您只需要在Windows资源管理器中右击目录,或者在目录窗口的空白处右击鼠标,点击菜单【从这里打开命令行窗口】就可以了,此时,您会发现,命令行窗口的当前目录就是您需要的目录。效果图前面有,请参考前文。
压缩效果
为了证明我的工具对于源代码目录压缩的效果是有明显改善的,现在我来将我的工具与7-Zip做个比较 。
首先,我要说明一下,7-Zip是目前全球最棒的压缩软件,它有着最高的压缩率。
但它唯一遗憾的是就是 不能自动在压缩时过滤不必要的垃圾文件(相对于源代码来说),因此最终产生的压缩包并不是最小的。

首先,我打开VS2008,创建一个ConsoleApplication,然后不修改任何设置,并写了如下代码:

复制代码 代码如下:

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello Fish.");
}
}
}

再来编译吧,我将这个项目按debug, release方式都编译了一次。

然后,我请出我安装的7-Zip V9.2把这个项目目录做了个压缩包。然后,我又用我的工具也做了个压缩包。二个包的大小如下:

有图有真相,我就不多解释了。
补充说明
默认的参数是按照C#项目及SVN版本控制软件而设置的,如有其它的备份要求,请重新设置参数。
默认的参数并没有采用最好的压缩质量,如果你需要较高的压缩质量,那么请自行调整。
运行本程序需要 .net Frarmework 2.0
由于FishCabToolExt.dll是个ATL COM,由32位的VC++6编译器编译,因此这个插件只能在32位的Windows中运行。
不过,FishCabTool.exe是个采用C#编写的WinForm程序,且要求以32位方式运行,因此如果在64位的Windows中,那么只能从开始菜单中启用本程序。
此时,程序仍能正常运行,只是不能从资源管理器的右键菜单中启动。


如何干净的卸载本工具

我写的是一个我认为有用的小工具,而非流氓软件。如果您认为它没有任何优点,请按如下方法卸载它。

由于FishCabToolExt.dll是个Windows资源管理器的插件,它一旦被加载,就不能立即卸载了。具体方法请参考下文:

FishCabTool的安装程序可以非常干净地将FishCabTool从你的电脑上删除(包括所有文件及注册表项)。
如需卸载,请关闭全部资源管理器窗口(建议注销后重新登录),然后直接打开“控制面板”中的“添加或删除程序”,选择删除FishCabTool即可。
注意:由于FishCabTool有一部分作为资源管理器的插件会被自动加载,所以在卸载时一定要保证关闭全部资源管理器窗口(包括桌面进程)。


上传代码到博客园
由于博客园的后台操作界面只支持三种格式的压缩包:zip, rar, 7z ,所以如果您打算用这个工具打包您的代码并上传到博客园时,请修改文件名,在后面加上 .7z
例如:我的博客【客户端的异步操作】就提供一些示例代码,我用工具打包后,生成的文件名是【AsyncClient_20111023.cab】,然后我将文件名修改为【AsyncClient_20111023.cab.7z】,就可以上传了。
可以放心的是:7-Zip 是可以识别这种改名后的文件。

由于现在知道CAB格式的人越来越少,可能还有些网站也不能支持直接上传,那么可按这种方式修改一下扩展名。

在此,我发出一个倡议:从现在起,如果您要与他人分享您的示例代码,那么请在打包时,不要包含不必要的垃圾文件。
因为那些垃圾文件会:浪费您的上传时间,浪费服务器的硬盘资源,浪费服务器的带宽,浪费所有网友的下载时间。
举手之劳,利人利已。

说明:工具可免费使用,没有版权限制。

点击此处下载安装程序(2011-10-30更新)

    您感兴趣的教程

    在docker中安装mysql详解

    本篇文章主要介绍了在docker中安装mysql详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编...

    详解 安装 docker mysql

    win10中文输入法仅在桌面显示怎么办?

    win10中文输入法仅在桌面显示怎么办?

    win10系统使用搜狗,QQ输入法只有在显示桌面的时候才出来,在使用其他程序输入框里面却只能输入字母数字,win10中...

    win10 中文输入法

    一分钟掌握linux系统目录结构

    这篇文章主要介绍了linux系统目录结构,通过结构图和多张表格了解linux系统目录结构,感兴趣的小伙伴们可以参考一...

    结构 目录 系统 linux

    PHP程序员玩转Linux系列 Linux和Windows安装

    这篇文章主要为大家详细介绍了PHP程序员玩转Linux系列文章,Linux和Windows安装nginx教程,具有一定的参考价值,感兴趣...

    玩转 程序员 安装 系列 PHP

    win10怎么安装杜比音效Doby V4.1 win10安装杜

    第四代杜比®家庭影院®技术包含了一整套协同工作的技术,让PC 发出清晰的环绕声同时第四代杜比家庭影院技术...

    win10杜比音效

    纯CSS实现iOS风格打开关闭选择框功能

    这篇文章主要介绍了纯CSS实现iOS风格打开关闭选择框,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作...

    css ios c

    Win7如何给C盘扩容 Win7系统电脑C盘扩容的办法

    Win7如何给C盘扩容 Win7系统电脑C盘扩容的

    Win7给电脑C盘扩容的办法大家知道吗?当系统分区C盘空间不足时,就需要给它扩容了,如果不管,C盘没有足够的空间...

    Win7 C盘 扩容

    百度推广竞品词的投放策略

    SEM是基于关键词搜索的营销活动。作为推广人员,我们所做的工作,就是打理成千上万的关键词,关注它们的质量度...

    百度推广 竞品词

    Visual Studio Code(vscode) git的使用教程

    这篇文章主要介绍了详解Visual Studio Code(vscode) git的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。...

    教程 Studio Visual Code git

    七牛云储存创始人分享七牛的创立故事与

    这篇文章主要介绍了七牛云储存创始人分享七牛的创立故事与对Go语言的应用,七牛选用Go语言这门新兴的编程语言进行...

    七牛 Go语言

    Win10预览版Mobile 10547即将发布 9月19日上午

    微软副总裁Gabriel Aul的Twitter透露了 Win10 Mobile预览版10536即将发布,他表示该版本已进入内部慢速版阶段,发布时间目...

    Win10 预览版

    HTML标签meta总结,HTML5 head meta 属性整理

    移动前端开发中添加一些webkit专属的HTML5头部标签,帮助浏览器更好解析HTML代码,更好地将移动web前端页面表现出来...

    移动端html5模拟长按事件的实现方法

    这篇文章主要介绍了移动端html5模拟长按事件的实现方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家...

    移动端 html5 长按

    HTML常用meta大全(推荐)

    这篇文章主要介绍了HTML常用meta大全(推荐),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参...

    cdr怎么把图片转换成位图? cdr图片转换为位图的教程

    cdr怎么把图片转换成位图? cdr图片转换为

    cdr怎么把图片转换成位图?cdr中插入的图片想要转换成位图,该怎么转换呢?下面我们就来看看cdr图片转换为位图的...

    cdr 图片 位图

    win10系统怎么录屏?win10系统自带录屏详细教程

    win10系统怎么录屏?win10系统自带录屏详细

    当我们是使用win10系统的时候,想要录制电脑上的画面,这时候有人会想到下个第三方软件,其实可以用电脑上的自带...

    win10 系统自带录屏 详细教程

    + 更多教程 +
    ASP编程JSP编程PHP编程.NET编程python编程