繁体   English   中英

在 .NET Core 2.0 中使用 COM 对象

[英]Using COM Object in .NET Core 2.0

因此,客户端有一个2007 年用 C 编写COM 对象,用于验证加密的会话 cookie。 这目前适用于旧版本的 .NET 使用以下内容。

var validate = Activator.CreateInstance(Type.GetTypeFromProgID("Company.Validate"));

新的实现将完全使用 C# 我已将验证逻辑提取到.NETCore类库中,我们依次在ASP.Net Core项目中引用该类库。

  1. 我尝试过 32 位和 64 位版本,以及 IIS 设置。

  2. 我已经反编译了 COM 对象并引用了它,它在本地工作,但不在开发服务器上,我收到以下错误:

    由于以下错误,检索具有 CLSID {EDC43BC6-5ECD-4501-AEB3-64A17180A13D} 的组件的 COM 类工厂失败:80040154 类未注册(来自 HRESULT 的异常:0x80040154 (REGDB_E_CLASSNOTREG)。

  3. COM 在本地和开发服务器上均已注册。

  4. Activator.CreateInstance在任一环境中都不起作用。

  5. 注册的 COM ID 和 ProgId 在本地和开发服务器上都是相同的。


问:我错过了什么,或者这不起作用? 有没有人在类似的挑战中取得过任何成功? 我忽略了什么吗?

您不能将 COM 与 .NET Core 一起使用。 COM 仅适用于 Windows,并且 .NET Core 中的所有内容都必须是跨平台的。 但是,您可以在完整框架上运行 ASP.NET Core 应用程序,然后可以使用 COM 库。 换句话说,运行完整框架并不妨碍您仍然能够使用 ASP.NET Core。 由于完整的框架/COM 依赖性,您只能部署到 Windows。 从技术上讲,如果您计划部署到 Mac 或 Linux 之类的设备,则只需要使用 .NET Core。 否则,就坚持你所知道的。

从未创建所需的注册表项。 我不得不为 Class、Interface 和 Type 手动添加大约 15 个键。 我相信这是因为 COM 从未被编组或调用(因为那不起作用),因此必须手动输入类 ID、AppID 和注册表映射。

我最近遇到了这个问题,试图实例化一个 x86 coclass。 事实证明,无论实际配置什么架构,Visual Studio 都会启动出现在系统路径中的第一个 dotnet.exe。 就我而言,dotnet.exe 的 x86_64 变体作为主机启动,而主机又无法创建任何 x86 coclass 实例。

尝试手动将您的项目加载到 dotnet.exe 的适当变体中,看看这是否有帮助。

编辑:在https://github.com/dotnet/core/issues/901 上更详细地讨论了这个问题

因为我还不能发表评论......您可以使用 regsvr32 MyComLibrary.dll 为您添加所有必要的注册表项。 请参阅https://helpdeskgeek.com/how-to/register-dll-file-in-windows/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM