.net dotNET COM组件问题

qgelzfjb  于 2023-11-20  发布在  .NET
关注(0)|答案(1)|浏览(154)

我有一个使用多个.NET 6 COM组件的遗留应用程序。根据COM组件的加载顺序,某些组件将无法加载并出现错误(0x800080A5)。
我已经上传了一个示例项目,将导致问题here
要点是有两个COM服务器,项目1和项目2。如果项目2具有某些依赖关系(在本例中为CoreWCF.WebHttp),并且在项目1之后加载,则会导致此错误。看起来好像发生了一些只触发一次的初始化。
如果颠倒加载顺序,使项目2在项目1之前加载,那么一切都将正常加载。

xyhw6mcr

xyhw6mcr1#

如果您使用DebugView等工具运行exe,您将看到以下输出:

The specified framework 'Microsoft.AspNetCore.App' is not present in the previously loaded runtime.

字符串
这是因为项目ComProject2隐含地需要Microsoft.AspNetCore.App框架,因为它依赖于CoreWCF.WebHttp包。
由于某些原因,.NET核心加载器无法在此COM方案中自动加载其他框架(exe不是.NET核心应用程序)。但您可以configure它,这里有更多详细信息:依赖于框架的部署模型
有多种方法可以修复它。一种解决方案是,* 在部署时 *,将生成的ComProject2.runtimeconfig.json文件的内容复制到ComProject1.runtimeconfig.json中,以强制第一个组件加载Microsoft.AspNetCore.App框架,因此它的内容应该是:

{
  "runtimeOptions": {
    "tfm": "net6.0",
    "rollForward": "LatestMinor",
    "frameworks": [
      {
        "name": "Microsoft.NETCore.App",
        "version": "6.0.0"
      },
      {
        "name": "Microsoft.AspNetCore.App",
        "version": "6.0.0"
      }
    ]
  }
}


另一种解决方案是,如这里所解释的,在ComProject1的根目录下创建一个名为runtimeconfig.template.json的文件,内容如下:

{
  "frameworks": [
    {
      "name": "Microsoft.AspNetCore.App",
      "version": "6.0.0"
    }
  ]
}


的数据
并且它将在构建时(第一次需要重建)被合并到ComProject1.runtimeconfig.json中。

相关问题