【问题标题】:Do I need to force the GAC to reload an assembly? Is this possible?我是否需要强制 GAC 重新加载程序集?这可能吗?
【发布时间】:2011-03-05 00:20:53
【问题描述】:

我已将类型添加到用于 COM 互操作的 .NET 类中。为了让它与我的 VB6 应用程序一起工作,我注销了 DLL 并重新注册了它(使用regasm)。然后我将其卸载并重新安装到 GAC(使用 gacutil)。

类型显示在 VB6 对象资源管理器中,但是当我在 VB6 IDE 中运行应用程序时,它在实例化新类型的行上中断,并出现错误:Automation Errror - The System cannot find the file specified

我觉得这很奇怪,因为我已经更新了 GAC,所以我卸载 GAC 的 dll 并得到完全相同的错误,这似乎表明旧版本的 dll 已经在内存中,需要“重新加载”,以便较新的 DLL 在内存中。这可能吗?如果可以,我需要做什么?

【问题讨论】:

    标签: .net com interop assemblies gac


    【解决方案1】:

    我怀疑 regasm.exe 正在为您的对象添加 COM 条目,并将它们指向程序集在 GAC 之前的位置。通常这不会产生影响,因为 GAC 在所有情况下都会获胜。但是对于 COM 互操作,可能会有所不同。

    尝试挖掘注册表并查看 COM 条目为您的 COM 接口指向的位置,并确保您的程序集存在于该位置。

    【讨论】:

    • 我不确定我是否在注册表中查找正确的位置,但是当我查看CLSID 中的相应键时,没有列出特定的 DLL,而是一个键调用InprocServer32,其值为(Default)AssemblyClassRuntimeVersion(即v4.0.30319)和ThreadingModel。由于没有指定 DLL(如果我使用带有 regasm/codebase 选项就会出现这种情况),我认为它正在尝试使用来自 GAC 的文件,但它看起来不像来自GAC 在更改时总是会加载到内存中,但我不确定。
    【解决方案2】:

    尝试保存您的 VB6 项目,关闭 IDE 并重新打开您的项目。在这种情况下,这对我有用。

    【讨论】:

      猜你喜欢
      • 2010-11-02
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多