【发布时间】:2018-09-04 17:28:09
【问题描述】:
我正在尝试运行使用 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。
当 CatalogService.dll 同时依赖于 32 位和 64 位 dll 时,如何在我的 Web 应用程序中使用它?我确信 RSEds.dll 会给我带来问题,因为它是我的项目使用的唯一 32 位 .dll。有没有办法在 64 位注册表中注册 RSEds.dll,即使它是 32 位的?
【问题讨论】:
-
罗克韦尔自动化不太可能无法帮助您。但你必须先给他们打电话。
标签: .net com visual-studio-2017 registry gac