【问题标题】:Using COM Object in .NET Core 2.0在 .NET Core 2.0 中使用 COM 对象
【发布时间】:2018-09-16 15:22:15
【问题描述】:

因此,客户端有一个从 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 在本地和开发服务器上都是一样的。


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

【问题讨论】:

  • DEV 服务器上运行 OleView(x86 和 x64)并验证您可以创建对象。说它已注册是不够的,特别是当证据似乎不是时
  • TypeLib 和接口都在那里,但是它没有在应用程序 ID 下列出,它在其他机器上。如何注册?
  • 知道了,OleView 帮了大忙。谢谢。

标签: c# .net asp.net-core com


【解决方案1】:

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

【讨论】:

  • .NET Core 不会强迫你跨平台。你当然可以使用它。你是对的,它不会在所有操作系统上运行,但是如果你想在 .NET Core 中使用 COM 并且只针对 Windows,你当然可以这样做。有限制。我最近在命令行、Windows 窗体和 ASP.NET Core 中使用 .NET Core 中的 COM 发表了一篇文章:mobilize.net/blog/mauricios-blog-redux
【解决方案2】:

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

【讨论】:

  • 你有你所做的样本吗?我现在有同样的问题。谢谢
  • 使用 OleView 创建必要的类 ID 和其他注册表项(这部分涉及最多)。接下来,获取您尝试注册的 DLL,如果您有源代码,请照常将其拉入您的项目,如果没有,请反编译源代码并在您的项目中生成一个“存根”类。
【解决方案3】:

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

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

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-02
      • 2011-10-05
      • 2018-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-17
      相关资源
      最近更新 更多