首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RegAsm -什么时候适用/codebase选项?

RegAsm -什么时候适用/codebase选项?
EN

Stack Overflow用户
提问于 2014-05-29 17:50:11
回答 1查看 22.5K关注 0票数 20

我有一个用C#编写的COM可见动态链接库,我想在VB6应用程序中使用它。我有两个主要的DLL用例,我想知道什么时候/codebase选项是适用的,什么时候在GAC注册更好。

用例:

  1. DLL将被加载到另一个开发人员PC上,并且需要VB6 IDE在Project > References菜单下访问DLL。
  2. 当VB6应用程序发布时,DLL将被加载到生产机器上。

任何关于/codebase的适当使用的信息都是有帮助的。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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应用程序。

票数 33
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23939699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档