【问题标题】:Resetting project compatibility in vb6在 vb6 中重置项目兼容性
【发布时间】:2011-12-31 19:42:04
【问题描述】:

当我们破坏 vb6 dll 中的兼容性时,我必须执行以下操作:

  1. 设置为无二进制兼容性
  2. 重新编译
  3. 再次设置兼容性
  4. 从所有使用它的项目中删除对已更改 dll 的引用
  5. 将引用添加回所有使用它的项目
  6. 重新编译所有这些项目
  7. 对使用这些项目等的任何项目执行相同操作。

当然,这有点简化,但任何曾经做过的人都应该知道我在说什么。

我的问题是:您是否找到了更好的方法来执行此操作,或者您是否找到了任何(不太昂贵的)工具来促进此过程?或者更好的是,您创建了一个可以与我分享的:)

请注意,我问的是如何简化此过程,而不是如何避免它。所以请不要回答破坏兼容性有多糟糕,我们不应该这样做。我生活在现实世界中,有些事情超出了我的控制范围,我只是想处理我所拥有的。

【问题讨论】:

标签: com vb6 activex dll


【解决方案1】:

在我之前的工作中,我们有一个巨大的 VB6 应用程序,其中包含我们在项目组中的项目中引用的数十个 VB6 DLL。我们经常破坏兼容性,并且不能像您描述的那样手动更新参考。

我们最初开发了一个工具,可以在中断和重新编译后更新文件夹中所有 .vbp 文件中的引用,但我最终发现了 Kinook Software (www.kinook.com) 的 Visual Build,它可以自动处理这个问题。

多年来,我成功地使用了他们的解决方案。他们的“Make VB6”操作(http://www.kinook.com/VisBuildPro/Manual/makevb6.htm)的好处在于它可以构建依赖关系树并以正确的顺序重建项目组中的所有项目,同时相应地更新引用。

对于您的方案,您需要将“在构建前设置版本兼容性”选项设置为“不兼容”,然后选中“设置二进制兼容性”复选框,以便项目在构建后恢复为二进制兼容性。

如果您有需要维护二进制兼容性的项目,只需将它们放在 .vbg 之外,它不会重建它。

【讨论】:

  • 甜蜜。如果其他人在接下来的 24 小时内没有提供免费的东西,肯定会将此标记为答案......我非常怀疑 :)
  • 很遗憾,我现在什至不会花那么多钱,但无论如何我都会将你的答案标记为你的答案,因为它看起来正是我想要的。
【解决方案2】:

Additional Visual Basic 5.0 & 6.0 Samples 提供了一个可能有用的二进制兼容性插件。在“安装”之后查看ReadMe.txtRevised Binary Compatibility.doc 文件(运行下载后需要执行一些步骤)。

此下载包括文档“修订的二进制兼容性”以及加载项 SyncCompt.dll。在 Visual Basic 5.0 和 Visual Basic 6.0 中实现的二进制兼容性可确保新版本的发货产品与旧版本完全兼容。该文档解释了有关二进制兼容性和 GUID 修订的问题,并介绍了 DLL。 DLL 插件会构建一个新的兼容性文件来稳定您的产品(标准 EXE 除外,它不具有二进制兼容性)。此工具仅适用于 Microsoft Windows NT® 环境。

这可能会也可能不会解决您的问题。

【讨论】:

    【解决方案3】:

    您不需要更改兼容性设置。但是,您需要确保您在兼容性设置中引用的 dll(或 exe)不是您即将编译到的位置。

    我们做了类似的事情,所以我们有以下结构:

    C:\ProductName\Bin - 包含所有实时程序集

    C:\ProductName\Bin\Compatibility - 包含上次构建中的所有程序集

    在我们进行构建之后(我们会自动通过对 VB6.exe 进行脱壳),我们将 \Bin 中的所有内容移动到 \Bin\Compatibility

    【讨论】:

    • 布兰登想要打破兼容性
    • @MarkJ 是的,这会破坏兼容性,因为它与可能兼容或不兼容的先前版本进行比较。当您使用 VB6.exe 进行编译时,您不会收到任何 GUI 询问您是否要继续 - 它只会继续
    • 也许我不明白。我假设您已打开二进制兼容性,并且参考二进制文件位于 Bin\Compatibility?你构建到Bin。所以Bin 中的二进制文件与Bin\Compatibility 二进制兼容。然后将Bin 中的二进制文件复制到Bin\Compatibility。所以现在,当你再次构建时,你的新二进制文件与Bin\Compatibility 中的二进制文件是二进制兼容的,即所有以前的构建。这是一种永远保持二进制兼容性而不是破坏它的方法。还是我误会了?
    • @markj 它们可能与 Bin\Compatibility 目录中的兼容,也可能不兼容 - 这是比较的位置,因此 VB 知道编译是否会破坏兼容性。跨度>
    • 这是参考二进制文件的位置。 VB 要么: (1) 成功编译并创建二进制兼容的版本。或者,(2) 如果您更改了代码,这意味着无法确定新版本是否兼容,VB 会提示您决定您希望做什么。但 Brandon 想要故意破坏兼容性,即使他没有进行任何强制不兼容的代码更改。
    【解决方案4】:

    我发现 MSDN 上的 Version Compatibility in ActiveX Components 系列对兼容性以及何时/如何破坏它具有高度启发性。我发布这个主要是为了将来参考。

    【讨论】:

      【解决方案5】:

      我通过不存储兼容性信息来解决问题。

      我从 .vbp 文件中删除了 CompatibleEXE32={dllname} 行

      我从不在构建后保存 .vbp 文件,这样引用就不会重新进入。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-08
        • 2023-01-29
        相关资源
        最近更新 更多