【发布时间】:2011-01-31 16:28:26
【问题描述】:
我无法在 COM 中公开 .NET 程序集。似乎我必须遗漏一些基本步骤,因为我认为我遵循了我发现的所有教程和文档以及常识,但是当我这样做时(在测试 VBScript 中):
Set o = CreateObject("MyLib.MyClass")
一直说无法创建对象。
以下是我已完成的步骤:
- 我有一个没有属性的简单单方法虚拟类。
- 该类位于一个类库中,该类库在 Visual Studio 中勾选了“使程序集 COM 可见”。
- 类库已签名。
- DLL 是通过 RegAsm.exe 使用 /codebase 参数注册的(我不想/不能将 DLL 添加到 GAC)。
为了确定,我尝试将库复制到与测试 VBScript 相同的目录,但没有帮助。
编辑:我应该提到如果我将 DLL 放入 GAC,我可以在 COM 中实例化类。
编辑:已解决。我没有完整的解释,但最终我发现它是由使用引起的:
%windir%\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe
而不是 64 位版本:
%windir%\Microsoft.NET\Framework64\v2.0.50727\RegAsm.exe
我比较了两个 RegAsm 生成的注册表项,它们是相同的。所以猜测它们生成的不是注册表项。
【问题讨论】:
-
确切的错误是什么?堆栈跟踪是什么?我想知道它是否找到了您的 DLL(因为您使用了 /codebase 参数)但找不到其他依赖的 DLL。
-
我打算调查错误详细信息,但在我这样做之前,我已经认为这是因为 AsmReg 的版本错误(请参阅下面的答案)。此外,它曾经在 GAC 中工作,并且该库确实有任何依赖项。所以问题最可能的根源似乎是一些注册问题。