我有一个用C#编写的COM可见动态链接库,我想在VB6应用程序中使用它。我有两个主要的DLL用例,我想知道什么时候/codebase选项是适用的,什么时候在GAC注册更好。
用例:
Project > References菜单下访问DLL。任何关于/codebase的适当使用的信息都是有帮助的。
谢谢。
发布于 2014-05-29 18:32:43
/codebase选项与您使用Regsvr32.exe注册COM服务器的方式完全相同。您必须为DLL选择一个特定的位置,并将该位置的路径写入注册表。这是危险的,COM服务器有一个强大的DLL地狱问题,因为他们的注册是在机器范围内。当您更新该DLL时,任何使用该服务器的应用程序都会受到影响。这并不是一种好的方式,它经常破坏一个应用程序,而该应用程序并没有重新编译以使用更新的服务器。
.NET对此进行了改进,因为它能够存储由AssemblyVersion选择的多个DLL版本。与Windows并行缓存的完全等效,即托管程序集的GAC。因此,没有重建的旧应用程序将继续不受影响地运行,仍然能够使用旧的DLL。这是个好办法。
当您忙着开发服务器时,建议使用/codebase。您可以跳过在GAC中注册DLL所需的额外步骤。忘记这样做是痛苦的,您的更改似乎无法工作,因为测试应用程序将加载旧版本。当您使用/codebase时,Regasm将显示一个警告,警告您有关DLL的地狱潜力,您可以忽略它。
当您让Visual负责使用Project > Properties > Build选项卡进行注册时,“registration互操作”复选框,那么您将得到与/codebase /tlb完全等价的内容。这样做更可取,因为它还可以确保程序集的旧版本未注册,从而避免注册表污染。但是VS必须运行提升,这样它才能写入注册表。
使用孤立的COM (也称为“无注册表COM")是最好的方法。它允许您将COM服务器的副本存储在与客户端程序相同的目录中,您根本不必注册它。然而,这需要对客户端程序进行修改,如果您对客户端应用程序没有任何控制权,或者它是其他人喜欢使用的应用程序,则很难做到这一点。例如,Microsoft应用程序。
https://stackoverflow.com/questions/23939699
复制相似问题