2010-06-17 63 views
0

我已经将类型添加到我用于COM互操作的.NET类中。为了让它与我的VB6应用程序一起工作,我取消注册DLL并重新注册它(使用regasm)。然后我卸载并重新安装到GAC(使用gacutil)。我是否需要强制GAC重新加载程序集?这可能吗?

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

我想这个奇怪的,因为我已经更新了GAC,所以我卸载的dll从GAC并得到了确切的同样的错误,这似乎表明该DLL的旧版本已经在内存和需求被“重新加载”,以便新的DLL在内存中。这是可能的,如果是这样,我需要做什么?

回答

0

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

1

我怀疑regasm.exe正在为您的对象添加COM条目,并在GAC之前将它们指向组件的位置。通常情况下,GAC无论在任何情况下都会赢得胜利,这应该没有什么不同。但是可能是是COM互操作的差异。

尝试通过注册表来查看COM条目指向COM接口的位置,并确保您的程序集位于该位置。

+0

我不确定我是否在注册表的正确位置,但是当我在'CLSID'中查找相应的键时,没有列出特定的DLL,而是一个名为'InprocServer32'的键, '(Default)','Assembly','Class','RuntimeVersion'(这是v4.0.30319)和'ThreadingModel'的值。由于没有指定DLL(因为如果我已经使用了'/ codebase'选项和'regasm'),我假设它正在尝试使用GAC中的文件,但因为它看起来并不像文件GAC在更改时总是加载到内存中,但我不确定。 – 2010-06-17 15:13:42

相关问题