在项目基础上加载Delphi设计时包

时间:2008-10-14 08:16:52

标签: delphi

有没有办法在项目基础上选择设计时包?

软件包在大型项目中非常有用,可以使构建时间保持可接受,但它们在这些大型项目中也是一个真正的pita。当一个开发人员添加一个新软件包时,它会为所有其他软件包打破,直到他们在他们的机器上安装新软件包。然后是包的版本化......

有人为此提供了合适的解决方案吗? (多年来一直困扰着我)

3 个答案:

答案 0 :(得分:8)

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

基本上它的工作原理如下:

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

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

当公司从Delphi 5/7迁移到Delphi 2007时,我实现了所有这些。之前我们在包版本化方面遇到了很多问题,并想要一些方法来版本化所有不同的包。

这种方法提供了一些很好的优势:

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

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

答案 1 :(得分:6)

这也不容易。您可以使用自定义注册表黑客,以及您感兴趣的每个配置的特定bds快捷方式来执行此操作:

  

要使用,只需创建一个新的快捷方式即可   修改命令行以通过例如   -rMyAlternateBDSReg。启动一次后,reg条目就是   已创建,他们可以配置   备用注册表他们想要的,   删除包等,没有   担心弄乱默认值   安装。

来自codegear

如果为每个项目设置配置,则可以为给定项目启动相应的快捷方式。这不是自动的,但它总比把所有东西都放在那里更好。

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

答案 2 :(得分:0)

我们将包中的源代码放在源代码管理中,同时还有一个重建它们的批处理文件。如果包中的树发生了变化,那么我们重建它们。这并不涉及安装新的软件包,但是有注册表命中可以解决这个问题,所以我们可能会包含.reg片段来处理它。