【问题标题】:Versioning of ActiveX COM DLL with Semantic Versioning but GUID per MAJOR.MINOR?带有语义版本控制但每个 MAJOR.MINOR 的 GUID 的 ActiveX COM DLL 版本控制?
【发布时间】:2014-11-19 04:38:15
【问题描述】:

长话短说,我是 VisualBasic 6 项目的维护者,该项目生产的 ActiveX COM DLL 被组织内部使用的约 50 个其他软件包内部使用。

在过去的几年里,我们一直在为每个发布的 DLL 遵循语义版本控制“MAJOR.MINOR.PATCH”,并为每个发布分配一个唯一的 GUID。即 1.1.1 和 1.1.2 有单独的 GUID。

它工作正常,但这会导致每个软件包都需要一个新版本——即使不需要任何软件包——只是为了它们可以引用新的 GUID 并重新编译。由于发布的内部流程,这浪费了几十个工时。

我的问题是,为每个 MINOR 版本维护一个 GUID 以使 1.1.1、1.1.2 甚至 1.1.99 都具有相同的 GUID 是否是一种“不好的做法”?每个主要版本都做一个 GUID 会更好吗?

这将导致仅在制作新的主要或次要版本时才更改引用,从而减少依赖它的软件包所需的更改次数。

最后,如果它有助于响应,当前 DLL 被命名为:MyActiveXDLL_vMAJOR.MINOR.PATCH.dll。

使用每个 MINOR 的 GUID,我们将切换到 MyActiveXDLL_vMAJOR.MINOR.dll

【问题讨论】:

    标签: dll com versioning semantic-versioning


    【解决方案1】:

    可以通过不更改 GUID 来执行此操作(您可以在 Class Builder 中设置它,它存储在隐藏属性中,如果您在记事本中打开源文件可以看到),但您只能在以下情况下执行此操作您没有进行任何重大更改。

    重大变化是:

    • 接口更改(添加/更改/删除/重新排序的方法/属性)
      • 包括对 dispid、参数顺序、参数名称的更改
    • 删除的接口
    • 以前有效但现在无效的方法。 (只有在使用该方法时才会出现问题。如果不再使用,您可以弃用它并让它抛出错误,但不能摆脱它)。

    默认情况下,在 VB 中,您将依赖自动生成的 dispid、guid 和接口。您可以使用类生成器将这些设置为特定值。

    您可以将初始值设置为上一版本中自动生成的值。您必须手动完成 - 您必须在 TLBVIEW 中打开类型库才能找出它们是什么。

    【讨论】:

    • 我以前使用二进制兼容性和以前编译的 DLL 来维护 GUID。只要现有接口不更改,GUID 就不会更改。它还允许在不更改 GUID 的情况下添加新接口。假设没有重大更改,这是开始使用的好习惯吗?每个 MAJOR 或每个 MAJOR.MINOR 版本都有一个 guid 会更好吗?
    • @robodude666 如果您使用二进制兼容性,那么您对版本号做什么并不重要。如果您不引入重大更改,并且版本号增加,则没有任何区别。这只是风格问题。
    猜你喜欢
    • 2010-10-19
    • 2018-08-08
    • 2012-07-19
    • 2010-10-01
    • 2018-02-03
    • 1970-01-01
    • 2013-02-21
    • 2015-03-10
    • 2017-05-19
    相关资源
    最近更新 更多