繁体   English   中英

是否无法加载使用不同 NETCore 版本构建的两个 C# COM 对象?

[英]Is it not possible to load two C# COM object built with different NETCore versions?

我有一个用Delphi编写的遗留系统,需要使用在NETCore中构建的 COM 对象。 当所有 COM 程序集都是使用 NET6 构建时,一切都运行良好。 当我试图加载一个用 NET7 编写的新 COM 对象时,问题就开始了。 那是我得到的错误:

指定的框架“Microsoft.NETCore.App”、版本“6.0.0”、apply_patches=1、version_compatibility_range=minor 与之前加载的版本“7.0.1”不兼容。

在 Delphi 中,我使用System.Win.ComObj中的CreateComObject函数来获取 COM。

在 C# 中,我使用的是 ComVisible(true),我还生成了一个MyCSharpCom.comhost.dll并使用regsvr32对其进行注册。

我的问题是:为什么一个 COM 对象的负载与其他对象共享同一个 NET 框架?

是否可以修复保持相同架构的问题,因为我无法强制第三方使用 NET 核心版本,这些第三方也将 COM 对象编写为插件/扩展以供 Delphi exe 使用?

在任何给定进程中,一次只能加载一个 .NET 运行时实例。 加载失败,因为您正在进程中使用 COM 类,并且它们尝试将 .NET 运行时的多个实例加载到同一进程。

您需要在进程外使用 COM 类。

如果 COM 类的供应商无法为您提供 COM 类的进程外版本,那么您将需要使用 .Net 创建单独的进程外 COM 服务器应用程序,它将充当进程内 COM 类的代理. 您可能决定只为 .Net 7 COM 类创建代理,因此 .net 6 COM 类将继续按原样使用,但 .Net 7 将通过代理在进程外使用。 或者您可以根据需要为所有类创建代理。

以下是如何在 .Net 中创建进程外 COM 类的示例: https ://github.com/dotnet/samples/tree/main/core/extensions/OutOfProcCOM

暂无
暂无

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

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