我有一个COM可见的DLL,用C#编写,我想在VB6应用程序中使用.我有两个DLL的主要用例,我想知道/ codebase选项是否适用,何时更好地在GAC中注册.
用例:
>该DLL将被加载到另一个开发人员的电脑上,需要在VB6 IDE的“项目>参考菜单
>当VB6应用程序被释放时,DLL将被加载到生产机器上
有关适当使用/ codebase的任何信息将会有所帮助.
谢谢.
/ 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.
使用隔离COM(也称“注册表免费COM”)是最好的方法.它允许您将COM服务器的副本存储在与客户端程序相同的目录中,并且您完全不必注册它.然而,这需要修改客户端程序,如果您无法控制客户端应用程序,或者是其他人喜欢混淆的应用程序,则很难.例如Microsoft Office应用程序.