我已将我的应用编译为x86。 我在我的应用程序中使用VB6 COM Interop。 我将引用设置为“Embed Interop type = Yes”,“Isolated = No”。
我不需要在客户端计算机上安装任何东西,甚至不需要“Interop.MyDLL.dll”,它在没有安装任何东西的情况下神奇地工作。
我可以在我的测试计算机上轻松测试,它运行正常。
现在,在我尝试访问DLL时,在客户端计算机上抛出错误“System.TypeInitializationException,class not registered,HRESULT:0x80040154(REGDB_E_CLASSNOTREG)”。
我重新编译应用程序并部署它后发生了。在此之前,它运作良好。
这可能是罪魁祸首?
答案 0 :(得分:1)
COM没有“魔力”,你必须注册VB6 COM组件(dll,ocx等)。
interop .NET dll不是COM组件,它只包含从.NET到COM的元数据/绑定,因此不需要注册。
PS:事实上,你没有有注册,你只需要给客户一个找到你的方法,所以也可以使用Registration-Free Activation of COM Components: A Walkthrough,但它可以比简单注册一堆dll更多的工作。