65.9K
CodeProject 正在变化。 阅读更多。
Home

ProjectZip Remoded 1.6 - 一个用于压缩 VC6 和 .NET 工作区及项目文件的“三合一”工具包

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.87/5 (36投票s)

2003年11月24日

CC (ASA 2.5)

5分钟阅读

viewsIcon

173248

downloadIcon

3662

使用独立可执行文件、资源管理器外壳扩展或更新的 VC6 插件来压缩您的 VC6 和 .NET 工作区及项目文件

下载次数

Sample Image - pzoptions.jpg

引言

我想衷心感谢那些通过电子邮件提醒我有关 .NET 移植的 ProjectZip 的人,在我对 VC6 插件产生初步兴趣后,我曾“承诺”要写这个。

我曾希望这个问题能够悄悄过去,因为我早期对 .NET 插件开发的尝试并没有让我感到兴奋。此外,.NET 2002 插件与 .NET 2003 不兼容的问题让我觉得,.NET 移植就像一个我真正不想打开的“潘多拉魔盒”,更不用说把手伸进去了!

尽管如此,承诺就是承诺,而且我至少算是一个比较有原则的人,所以我积极地思考了其他替代方案,这些方案或许可以在不进行实际 .NET 移植的情况下满足 .NET 社区的需求。

另外,还有一些与能够压缩整个工作区而不是仅仅是活动项目相关的工作没有完成,这促使我继续完成这项工作,我想我现在已经完成了(或多或少)。

结果是一个“三合一”解决方案 - 三个具有相同核心功能的工具 - 提供了多种方式来压缩 Visual Studio 6 和 **所有版本** 的 Visual Studio .NET 的工作区或项目文件。

我对核心功能进行重新架构的方式,也应该能够使其扩展支持来自其他开发环境的项目文件,例如 Borland C++、Delphi 和 Visual Basic。

1. ProjectZip 可执行文件 (新增)

这是 .NET 用户的两种解决方案之一,尽管它也可以直接从资源管理器运行,或者更可能从快速启动栏(或其他什么名称)运行。

除了命令行上的文件名之外,可执行文件还接受以下参数:

  • /q - 使用当前选项快速压缩
  • /o - 仅显示选项对话框
  • /u - 从 .zip 文件解压缩工作区或项目

压缩时,文件名可以具有以下扩展名之一:

  • .dsp
  • .dsw
  • .sln
  • .vcproj

解压缩时为 .zip。

如果您除了文件名之外不传递任何参数,则假定您想要压缩该文件。

如果命令行上传递了不合适的文件,您只会看到选项对话框。

最后,如果您在没有命令行的情况下运行可执行文件(即从资源管理器运行),系统将提示您浏览要压缩的文件。

2. ProjectZip 外壳扩展 (新增)

这是 .NET 用户的第二种解决方案,尽管对于 VC6 用户来说,它也可能成为首选方案,因为它不需要运行 VC6。

要安装,您只需要:

  1. ProjectZipShExt.dll 复制到您选择的文件夹。
  2. 关闭所有资源管理器窗口。
  3. 按以下方式注册它:regsvr32 "<path>\ProjectZipShExt.dll"

然后,每当您在资源管理器中右键单击 VC6/7 工作区或项目文件时,您都会有压缩该文件的选项。

注意:目前,您总是会看到选项对话框,因为我想限制添加到资源管理器上下文菜单的菜单项数量。

VC6 的 ProjectZip 插件 (更新)

该插件已进行大量重写,以支持重新架构的核心功能,现在拥有 5 个按钮,而不是原来的 3 个。这两个额外的按钮允许压缩整个工作区,而不仅仅是活动项目。

工作区和项目这两种形式分别用按钮上的“W”和“P”表示。

我还消除了必须打开工作区或项目才能使用插件的限制。相反,如果无法确定当前的工作区或项目,系统将提示您浏览要压缩的文件。

要安装和使用该插件:

  1. 如果 VC6 打开,请关闭它。
  2. ProjectZip6Addin.dll 复制到“..\Microsoft Visual Studio\Common\MSDev98\AddIns”
  3. 重新启动 VC6。
  4. 从“工具|自定义”对话框中选择“插件和宏文件”选项卡。
  5. 选中“ProjectZip6Addin”条目旁边的复选框。
  6. 关闭对话框后,ProjectZip 工具栏应该会出现,您可以将其拖放到 VC6 主窗口上。

注意:对于现有用户,对于重命名插件表示歉意,但由于有 3 个提供类似服务的项目,我不得不区分它们。

重构代码

以下图表(使用 CodePlotter 绘制,由 AbstractSpoon © 2003 版权所有)显示了 ProjectZip 工具集核心功能的架构。

{{DIAGRAM_START

: ProjectZip Core Functionality Architecture

                                                .------------------.
                                                |CProjectZip6      |
                                                |__________________|
                                                |                  |
                                                |overides virtual m|
                                                |ethods to provide |
                                                |parsing of the dsp|
                                                | and dsw files    |
                                        -------->------------------·
                                        |
  .-------------.    .------------------^.
  |IProjectZip  >---->CProjectZipBase    >------>------------------.
  |_____________|    |___________________|      |CProjectZip7      |
  |             |    |                   |      |__________________|
  |pure virtual |    |contains generic zi|      |                  |
  | interface   |    |p code with key met|      |overides virtual m|
  ·-------------·    |hods declared as pu|      |ethods to provide |
                     |re virtual to handl|      |parsing of the vcp|
                     |e different file fo|      |roj and sln files |
                     |rmats              |      ·------------------·
                     ·------------------v·
                                        |
                                        -------->------------------.
                                                |Other Formats...  |
                                                |                  |
                                                |                  |
                                                ·------------------·
}}DIAGRAM_END

这种架构为我带来了许多好处:

  • 可以通过简单地派生自 CProjectZipBase 并实现 3 个纯虚函数(其中两个是一行代码)来添加新的工作区/项目文件格式。
  • CProjectZipBase(占代码的 95%)不了解特定的文件格式,这可以保护它免受文件格式的篡改。
  • 前面描述的工具只需要与 IProjectZip 接口,从而进一步保护它们免受 CProjectZipBase 及其派生类内部更改的影响。

如果您不使用 Visual Studio,并且希望为自己使用的特定开发系统开发解析器,我很乐意回答您可能有的任何问题,并就所需工作提供指导。

Copyright

代码在此提供给您无限制地使用和滥用,但您不能修改它并声称是自己的。

历史

  • 1.6 (2004年4月2日)
    • 添加了选项,允许压缩“非必需”的项目文件,例如 .clw、.ncb、.opt、.suo。
    • 修复了与使用正确的用户偏好设置相关的各种错误。
    • 在浏览要压缩的文件后,现在会保存筛选器索引(仅影响可执行文件)。
  • 1.5.2 (2004年3月9日)
    • 添加了代码来处理形式为 ('\file.cpp') 的项目文件路径,这些路径是项目文件所在驱动器根目录下的文件(感谢 **gjr**)。
    • 修复了直接注册表访问失败的注册表代码(感谢 **Peter Boulton**)。
  • 1.5.1 (2004年3月5日)
    • 对 .NET 项目文件解析进行了微小调整,使其更加健壮。
  • 1.5 (2004年3月4日)
    • 进行了重构,以支持多个项目文件扩展名(这对 .NET 工作区很重要)。
    • 增加了对 .NET2003 项目文件的支持(微软对格式进行了微妙的更改)。
  • 1.4 (2004年3月3日)
    • 添加了将压缩文件名设置为小写的选项。
    • 压缩路径已保存并恢复到/从注册表中(以工作区路径为键)。
  • 1.0
    • 初始发布
© . All rights reserved.