客户端计算机上的嵌入式互操作 REGDB_E_CLASSNOTREG 错误

Embedded Interop REGDB_E_CLASSNOTREG error on client machine

我已将我的应用程序编译为 x86。 我在我的应用程序中使用 VB6 COM Interop。 我已将引用设置为 "Embed Interop type=Yes"、"Isolated=No"。

我不需要在客户端机器上安装任何东西,甚至 "Interop.MyDLL.dll",它不用安装任何东西就神奇地工作了。

我可以在我的测试计算机上轻松测试它,它工作得很好。

现在,在客户端计算机上,当我尝试访问 DLL 时抛出错误 "System.TypeInitializationException, class not registered, HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)"。

它发生在我重新编译应用程序并部署它之后。在此之前,它运行良好。

这里的罪魁祸首是什么?

COM没有"magic",必须注册VB6 COM组件(dll、ocx等)。

interop .NET dll 不是 COM 组件,它只包含 metadata/binding 从 .NET 到 COM,因此不需要注册。

PS:其实你不用注册,你只需要给客户一个途径找到你,所以也有可能使用 Registration-Free Activation of COM Components: A Walkthrough,但它比简单地注册一堆 dll 更有效。