我得到了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?
谢谢
答案 0 :(得分:4)
COM因其DLL Hell问题而臭名昭着。注册是机器上所有程序的全局注册。因此,替换DLL通常会破坏使用COM服务器的其他程序。
.NET有一个对策,当您运行Regasm.exe来注册[ComVisible] .NET程序集时,默认情况下它会假定您将程序集放在GAC中。这会自动购买DLL Hell保护。然而,特别是在您的开发机器上以及IDE完成的情况下,使用/ codebase选项注册程序集并不罕见。
但是现在你有一个新问题,CLR没有很好的机制来定位依赖的.NET程序集。探测路径基于EXE,即COM客户端。这就是为什么将依赖程序集复制到EXE安装目录中的原因。
哪个适用于测试,但不是您在部署服务器时要使用的通用解决方案。您无法准确预测EXE将使用COM服务器以及它所在的位置。而搞乱其他人拥有的程序的安装目录往往在政治上很困难。
使用GAC,解决了所有问题。