gpt4 book ai didi

dll - RegAsm -/codebase 选项何时适用?

转载 作者:行者123 更新时间:2023-12-03 05:47:15 27 4
gpt4 key购买 nike

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


用例:

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

  2. 当 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 完全相同的内容。这样做更可取,因为它还可以确保旧版本的程序集被取消注册,从而避免注册表污染。但 VS 必须提升运行权限才能写入注册表。

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

关于dll - RegAsm -/codebase 选项何时适用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23939699/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com