ActiveX/COM/VB6企业项目的构建过程

ActiveX/COM/VB6企业项目的构建过程,com,vb6,build-process,build-automation,version-control,Com,Vb6,Build Process,Build Automation,Version Control,我们使用微软的ActiveX/COM(VB6)技术开发了一个软件系统。在过去的一年里,我对自动化构建过程和整个SCM越来越感兴趣。我集中搜索了web的大部分内容,以获取有关如何使用基于COM的软件系统进行scm的最佳实践的信息 COM的“问题”是,引用组件通过唯一的接口id保存引用。当您重新编译引用的组件时,id可能会更改,引用不再有效。这里的主要问题是,iid被编译成二进制文件。因此,当我不想将编译后的文件签入版本控制时,每个开发人员都必须编译自己的版本并获得其他ID 当我想在干净的构建机器上

我们使用微软的ActiveX/COM(VB6)技术开发了一个软件系统。在过去的一年里,我对自动化构建过程和整个SCM越来越感兴趣。我集中搜索了web的大部分内容,以获取有关如何使用基于COM的软件系统进行scm的最佳实践的信息

COM的“问题”是,引用组件通过唯一的接口id保存引用。当您重新编译引用的组件时,id可能会更改,引用不再有效。这里的主要问题是,iid被编译成二进制文件。因此,当我不想将编译后的文件签入版本控制时,每个开发人员都必须编译自己的版本并获得其他ID

当我想在干净的构建机器上检查源代码以编译系统时,这是不可能的,因为所有引用都是无效的(没有二进制文件,没有接口ID)

我只是想知道,如果有一些最佳实践,如何为COM项目(VB6)建立一个自动构建系统

编辑: 是的,我知道兼容性设置。但是以这个场景为例,我想在一个干净的构建机器上构建wohle系统,而不需要任何二进制文件。 当你说一个项目是二进制兼容的时候,你必须提供与该项目兼容的二进制文件

我想我必须编写一个定制的构建工具,在编译项目之前和之后修改项目文件中的引用和兼容性设置

因为VB6/COM是一种非常广泛的技术,我只是在想必须有一个现成的解决方案

我们通常使用二进制兼容性进行编译。当我们修改组件的公共接口时,我们使用项目兼容性进行编译。 但是,当您更改许多其他组件使用的基本组件的接口时,您必须手动更改所有引用项目到项目的兼容性,重新编译它们并更改回二进制兼容性。
这是我想要自动化的主要过程。

通过将项目的兼容性设置从“无兼容性”更改为“二进制兼容性”,可以告诉VB6重用GUID(IID的CLSID的LIBID等)。您可以在项目->项目属性下找到这些设置。兼容性设置位于“项目属性”窗口的“组件”选项卡上。有三种选择:

  • 不兼容
  • 项目兼容性
  • 二进制兼容性
以下是关于他们的看法:

不兼容
使用此设置时,没有 兼容性是强制的。视觉的 Basic创建新的接口ID和 每次生成或删除 编译你的项目。每个版本 Build只能与一起使用 创建应用程序来处理该问题 组件的特定构建

项目兼容性

使用此设置,您可以 与特定项目兼容的项目 组件项目。而新型 图书馆信息生成后 维护类型库标识符 这样测试项目仍然可以参考 到组件项目。这个设置 是为了保持兼容性 在测试过程中。因此,一旦 组件被释放后,它将表现为 与“无兼容性”设置相同

二进制兼容性

编译项目时,请使用Visual Studio Basic只创建新的类和 必要时提供接口ID。信息技术 保留类和接口ID 从以前的版本中删除,以便 使用早期版本编译的程序 该版本将继续工作。如果你 我们正在做出改变,这将导致 在不兼容的版本中,可视 Basic将警告您。如果你想 保持与旧版本的兼容性, ActiveX的发布版本 组件,这是您需要的设置 需要使用

听起来您当前的编译与不兼容。正如MSDN文章所述,您需要使用二进制兼容性来保持较新版本的组件与较旧版本的组件兼容。您现在可以通过执行以下操作来执行此操作:

  • 在不兼容的情况下编译每个项目一次

  • 将这些“干净”版本保存到进行构建的人员可以轻松访问的文件夹中,例如网络共享,或者将其置于源代码管理中

  • 返回并将所有项目更改为“二进制兼容性”,并将“兼容文件”指向刚刚保存在网络/源代码管理中的相应版本(不要将兼容文件指向编译项目的同一路径。兼容文件应该是原始组件的单独副本,不会更改。它的存在只是为了在重新编译项目时VB可以将该文件中的ID复制到项目中)

每次重新编译项目时,它们都将重用组件兼容(原始)版本中的GUID

编辑:正如Joe在评论中提到的,您还必须识别类接口何时发生了更改(即,当接口发生足够的更改时,您可以不再与以前的版本保持二进制兼容性)。发生这种情况时,您希望与以前的组件版本完全不同:重新编译一个新的“clean”版本(即不兼容),并在将来的版本中使用该新版本作为兼容文件。但是,需要注意的是,只有在类接口(属性和方法)发生更改时,才应重新启动。事实上,当项目与组件的早期版本不再兼容时,VB将向您发出警告

如果你想生活在边缘。。。
在我工作的地方,我们倾向于(ab)在我们的大多数项目中使用不兼容,即使这不是真正正确的方法(你应该使用Bi)