【问题标题】:How to centralize a .net dll (com interop) that is referenced by a VB6 dll如何集中 VB6 dll 引用的 .net dll(com 互操作)
【发布时间】:2012-08-13 22:58:39
【问题描述】:

我收到了一个 VB6 程序员的要求(是的,他们仍然存在)。存在使用 vb6 dll 的 vb6 应用程序,此 dll 现在使用 .net dll,而后者又使用另一个 .net dll。现在我的要求是 .net dll 应该像 vb dll 一样工作,即一旦注册了 vb6 dll,它就可以被其他应用程序使用,并且在推出时不需要包含(所以我被告知)。有没有办法放置我的 .net dll 以便其他 vb6 应用程序可以使用它。据我所知,这仅在我的 .net dll 与我的 vb6 exe 位于同一文件夹中时才有效。

我已阅读此How Does a COM Program Locate a .NET DLL Registered for COM Interop?

谢谢

【问题讨论】:

    标签: dll .net-4.0 vb6 dllregistration


    【解决方案1】:

    COM 因其 DLL Hell 问题而臭名昭著。注册对于机器上的所有程序都是全局的。因此,替换 DLL 通常会破坏其他使用 COM 服务器的程序。

    .NET 对此有一个应对措施,当您运行 Regasm.exe 来注册 [ComVisible] .NET 程序集时,它将默认假定您将程序集放入 GAC。这会自动购买 DLL 地狱保护。然而,使用 /codebase 选项注册程序集并不少见,尤其是在您的开发机器上以及由 IDE 完成的情况。

    然而,您现在会遇到一个新问题,CLR 没有很好的机制来定位相关的 .NET 程序集。探测路径基于 COM 客户端 EXE。这就是为什么将您的依赖程序集复制到 EXE 安装目录中的原因。

    这很适合测试,但不是您在部署服务器时想要使用的通用解决方案。您无法准确预测什么 EXE 将使用 COM 服务器以及它的位置。弄乱别人拥有的程序的安装目录通常在政治上很困难。

    使用 GAC,所有问题都解决了。

    【讨论】:

    • 我喜欢“政治困难”这个词。有趣的是,在大公司的编程中有很多政治因素。这是糟糕的管理者的结果。
    猜你喜欢
    • 1970-01-01
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    • 2011-02-21
    • 2013-12-16
    • 1970-01-01
    相关资源
    最近更新 更多