我正在尝试运行使用Nodejs,Edgejs,Angular4和名为“CatalogService.dll”的C#后端服务层构建的Web应用程序。我正在使用Visual Studio 2017来构建C#服务。每当我在Visual Studio中将平台目标设置为“任何CPU”或“x64”并运行应用程序时,我都会收到错误消息:
由于以下错误,检索具有CLSID {EF5A2281-02BA-11D2-8922-AFB2FA76911F}的组件的COM类工厂失败:80040154未注册类
我在注册表中查找了CLSID“EF5A2281-02BA-11D2-8922-AFB2FA76911F”。 CLSID引用计算机上名为RSEds.dll的.dll文件。 CLSID在WOW6432Node下,它告诉我RSEds.dll是32位dll,但不是64位。
由于DLL是32位,我尝试将Visual Studio中的目标平台设置为x86。但是现在当我运行应用程序时,我得到了一个不同的错误:
错误:无法加载文件或程序集“CatalogService.dll”或其依赖项之一。尝试加载格式不正确的程序。
我的电脑运行的是Windows 7 x64。我正在研究的C#项目取决于32位和64位DLL。我已经面对这个问题超过4周了,并尝试了其他几个解决方案:
如果依赖于32位和64位dll,我如何在我的Web应用程序中使用CatalogService.dll?我确信RSEds.dll给了我一些问题,因为它是我项目使用的唯一32位.dll。有没有办法在64位注册表中注册RSEds.dll,即使它是32位?
答案 0 :(得分:1)
如果没有相应的64位DLL可用,您可以选择在代理进程中托管CoClass
。这样,即使服务器的位数不匹配,您的客户端也可以创建实例。但是,这种方法的一个缺点是跨进程边界的调用速度较慢。
有关详细信息,请参阅this答案。