【问题标题】:Loading Delphi designtime packages on a project base在项目基础上加载 Delphi 设计时包
【发布时间】:2008-10-14 08:16:51
【问题描述】:

有没有办法根据项目选择设计时包?

包在大型项目中非常有用,可以让构建时间保持在可接受的范围内,但它们在那些大型项目中也是一个真正的皮塔。当一个开发人员添加一个新包时,它会中断为所有其他人构建,直到他们在他们的机器上安装新包。然后是包的版本控制...

那么有没有人为此提供适当的解决方案? (这已经困扰我多年了)

【问题讨论】:

    标签: delphi


    【解决方案1】:

    在我之前的工作中,我编写了一个小工具来帮助我们对包进行版本控制。我真的应该在业余时间重新创建该工具并使其可用。不过这个工具并不难写,所以也许你可以自己实现类似的东西。

    基本上它是这样工作的:

    • Subversion repo 包含子文件夹中的所有包。存储库中的每个包文件夹都有相同的子文件夹:Lib(用于 DCU)、Source、Help(如果需要)
    • 在存储库的根文件夹中,该工具与一个 XML 文件一起存放。
    • XML 文件为每个包指定了所有需要的信息:哪个文件夹包含 DCU,哪个文件夹包含源代码,需要运行哪个命令以获得帮助。
    • 该工具读取 XML 并显示所有可用包的复选框。已安装的包(从 BDS 注册表中读取)被标记为选中。
    • 用户可以选择要安装/卸载的软件包。
    • 该工具在 BDS 注册表中添加/删除必要的键。它将 DCU/Lib 文件夹添加到 IDE 的搜索路径中,将源文件夹添加到 IDE 浏览路径中,并向自定义 IDE 专家注册帮助命令(此专家提供了默认帮助菜单的扩展以启动所有已安装软件包的帮助)
    • 该工具甚至可以检查包之间的冲突和依赖关系。例如,Raize Components 的第 3 版和第 4 版都可用,它们不能同时处于活动状态。依赖关系检查对于从 TurboPower AsyncPro 派生的内部组件很有用(许多内部组件依赖于通过 AsyncPro 进行的串行通信)

    一个可能的扩展是能够保存/加载包的选择并将该选择存储在每个项目中,这样您就可以只加载特定项目所需的包。

    当公司从 Delphi 5/7 迁移到 Delphi 2007 时,我实现了所有这些。我们之前在包版本控制方面遇到了很多问题,并希望通过某种方式对所有不同的包进行版本控制。

    这种方法提供了一些不错的优势:

    • 当必须进行错误修复或发布新版本的第三方软件包时,必须由一个人将更改提交给 subversion。所有其他开发人员都可以从 subversion 进行更新,并获得最新版本而没有任何问题。
    • 当将新的组件包添加到环境中时,一个人必须提交所有文件,更改 XML 包列表,然后其他开发人员可以进行 subversion 更新并运行该工具以轻松集成包。李>
    • 所有第三方和自定义内部组件现在都可以轻松进行版本控制。
    • 通过在 subversion 存储库中包含 DCU(和其他二进制文件),我们确保所有开发人员都使用相同的编译版本。以前,不同的编译可能会使用不同的设置,从而导致某些组件的行为不同。
    • 当所有其他开发人员最终安装 Delphi 2007 时,他们的软件包在不到 10 分钟内就安装好了(大部分时间都花在从 subversion repo 下载所有内容上;该工具本身可以在不到 2 秒的时间内安装 20 个软件包)。以前,手动安装 Delphi5/7 的所有软件包可能需要长达 2 天的时间才能完成安装。

    这不仅仅用于一些内部组件,该 repo 还包括一些大型组件包:Raize Components、JCL/JVCL(尽管使用他们的安装程序而不是工具)、DevExpress Quantum Grid 3 和4、TurboPower AsyncPro

    【讨论】:

    • 听起来很有用!请务必提供。 . .
    • 是的,我很乐意提供它。但是我要么必须从头开始重新创建它(不是那么有趣,而且我会错过很多原始版本的错误修复),或者让我以前的雇主开源它。不过值得一试与他们交谈,我在那里仍然有很好的联系。
    • 这非常接近我自己的想法。我希望这样的事情已经存在。我希望你能找到一些空闲时间来做这件事,因为这是迫使开发人员转向其他环境的想法之一。谢谢。
    【解决方案2】:

    这也不容易。不过,您可以通过使用自定义注册表 hack 以及您感兴趣的每个配置的特定 bds 快捷方式来做到这一点:

    要使用,只需创建一个新的快捷方式,然后 修改命令行以通过例如 -rMyAlternateBDSReg。然后在启动一次之后,注册条目是 创建,他们可以配置 他们想要的所有备用注册表, 删除包等,而不 担心会破坏默认设置 安装。

    来自codegear

    如果您为每个项目设置了配置,则可以为给定项目启动相应的快捷方式。这不是自动的,但总比一直拥有一切要好。

    一个很好的副作用是加载时间将得到改善。

    【讨论】:

      【解决方案3】:

      我们将包的源代码与重建它们的批处理文件一起放在源代码控制中。如果包的树发生变化,那么我们会重建它们。这并没有解决安装新包的问题,​​但是有一些注册表点击可以解决这个问题,所以我们可以包含 .reg sn-ps 来处理这个问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-18
        • 2020-01-15
        • 2014-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-19
        • 1970-01-01
        相关资源
        最近更新 更多