dotNET COM 初始化问题

问题描述 投票:0回答:1

我有一个使用多个 .NET 6 COM 组件的旧应用程序。根据 COM 组件的加载顺序,某些组件将无法加载并出现错误 (0x800080A5)。

我已经上传了一个会导致问题的示例项目here

要点是有两个COM服务器,项目1和项目2。如果项目2有一定的依赖关系(在本例中

CoreWCF.WebHttp
),并且在项目1之后加载,那么就会导致这个错误。似乎发生了一些只触发一次的初始化。

如果加载顺序相反,即项目 2 在项目 1 之前加载,那么一切都会正常加载。

.net .net-core com
1个回答
0
投票

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

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

这是因为项目 ComProject2 隐含地需要

Microsoft.AspNetCore.App
框架,因为它依赖于
CoreWCF.WebHttp
包。

由于某种原因,.NET Core 加载程序无法在此 COM 场景中自动加载附加框架(exe 不是 .NET Core 应用程序)。但是您可以配置它,这里有更多详细信息:依赖于框架的部署模型

有多种修复方法。一种解决方案是,在部署时,将生成的

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"
      }
    ]
  }
}

另一个解决方案是,如here所述,在 ComProject1 的根目录下创建一个名为

runtimeconfig.template.json
的文件,其内容如下:

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

并且它将在构建时(需要第一次重建)合并到

ComProject1.runtimeconfig.json

© www.soinside.com 2019 - 2024. All rights reserved.