RegAsm - /codebase选项何时适用?

dav*_*idk 18 vb6 com dll comvisible regasm

我有一个用C#编写的COM可见DLL,我想在VB6应用程序中使用它.我有两个DLL的主要用例,我想知道该/codebase选项何时适用以及何时最好在GAC中注册.


用例:

  1. DLL将被加载到另一台开发人员PC上,并且需要在Project > References菜单下的VB6 IDE中访问

  2. 当VB6应用程序发布时,DLL将被加载到生产机器上


有关适当使用的任何信息/codebase都会有所帮助.

谢谢.

Han*_*ant 26

/ codebase选项与您使用Regsvr32.exe注册COM服务器的方式完全等效.您必须选择DLL的特定位置,并将该位置的路径写入注册表.这是有风险的,COM服务器具有强大的DLL Hell问题,因为它们的注册是机器范围的.更新该DLL时,任何使用该服务器的应用程序都将受到影响.通常不会以一种好的方式,这经常会破坏未重新编译以使用更新的服务器的应用程序.

.NET通过能够存储由[AssemblyVersion]选择的DLL的多个版本来改进.Windows并行缓存的完全等价物,即托管程序集的GAC.因此,未重建的旧应用程序将继续不受影响地运行,仍然可以使用旧的DLL.这是一个好方法.

在忙于开发服务器时,建议使用/ codebase.您可以跳过在GAC中注册DLL的额外必需步骤.忘记这样做很痛苦,你的更改似乎不起作用,因为测试应用程序将加载旧版本.当你使用/ codebase时,Regasm会显示一个警告,警告你关于DLL Hell的潜力,你可以忽略它.

当您让Visual Studio通过"项目">"属性">"构建"选项卡"注册COM互操作"复选框进行注册时,您将获得Regasm/codebase/tlb的完全等效项.这样做更为可取,因为它还确保了旧版本的程序集未注册,从而避免了注册表污染.但VS必须运行升级才能写入注册表.

使用隔离COM(又名"无注册表COM")是最好的方法.它允许您将COM服务器的副本存储在与客户端程序相同的目录中,而您根本不需要注册它.然而,这需要修改客户端程序,如果您对客户端应用程序没有任何控制权,或者如果它是其他人喜欢混淆的那种应用程序,则很难.例如,Microsoft Office应用程序.