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

Visual Studio 2017: How to run an app that uses both 32 and 64-bit DLLs?

我正在尝试 运行 使用 Nodejs、Edgejs、Angular4 和名为 "CatalogService.dll" 的 C# 后端服务层构建的 Web 应用程序。我正在使用 Visual Studio 2017 构建 C# 服务。每当我将 Visual Studio 中的平台目标设置为 "Any CPU" 或 "x64" 和 运行 应用程序时,我都会收到一条错误消息:

为 CLSID 为 {EF5A2281-02BA-11D2-8922-AFB2FA76911F} 的组件检索 COM class 工厂失败,原因如下:80040154 Class 未注册

我在注册表中查找了 CLSID "EF5A2281-02BA-11D2-8922-AFB2FA76911F"。 CLSID 指的是我计算机上名为 RSEds.dll 的 .dll 文件。 CLSID 在 WOW6432Node 下,这告诉我 RSEds.dll 是 32 位 dll,但不是 64 位。

由于 DLL 是 32 位的,我尝试将 Visual Studio 中的目标平台设置为 x86。但是现在当我 运行 应用程序时,我得到了一个不同的错误:

错误:无法加载文件或程序集 'CatalogService.dll' 或其依赖项之一。试图加载格式不正确的程序。

我的电脑是 运行ning Windows 7 x64。我正在处理的 C# 项目依赖于 32 位和 64 位 DLL。我已经面对这个问题 4 个多星期了,并尝试了其他几种解决方案:

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

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

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