Visual Studio 2017:如何运行同时使用32位和64位DLL的应用程序?

时间:2018-03-26 14:19:03

标签: .net com visual-studio-2017 registry gac

我正在尝试运行使用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周了,并尝试了其他几个解决方案:

  • 尝试以管理员身份运行Regsvr32(32位和64位版本)以注册RSEds.dll。即使注册消息说它成功了,但这并没有解决问题。
  • 尝试在RSEds.dll上使用RegAsm,但由于RSEds.dll不是.NET程序集,因此失败。
  • 尝试使用gacutil / i将RSEds.dll添加到全局程序集缓存(GAC),但这导致错误:将程序集添加到缓存失败:模块应该包含程序集清单。
  • 尝试更改IIS中的应用程序池设置以启用32位应用程序,但这不起作用,因为我的Web应用程序不使用IIS。

如果依赖于32位和64位dll,我如何在我的Web应用程序中使用CatalogService.dll?我确信RSEds.dll给了我一些问题,因为它是我项目使用的唯一32位.dll。有没有办法在64位注册表中注册RSEds.dll,即使它是32位?

1 个答案:

答案 0 :(得分:1)

如果没有相应的64位DLL可用,您可以选择在代理进程中托管CoClass。这样,即使服务器的位数不匹配,您的客户端也可以创建实例。但是,这种方法的一个缺点是跨进程边界的调用速度较慢。

有关详细信息,请参阅this答案。