提问人:WCP 提问时间:11/9/2023 最后编辑:Simon MourierWCP 更新时间:11/9/2023 访问量:43
dotNET COM 初始化问题
dotNET COM Initialization Issues
问:
我有一个使用多个 .NET 6 COM 组件的旧应用程序。根据 COM 组件的加载顺序,某些组件将无法加载并出现错误 (0x800080A5)。
我已经上传了一个示例项目,该项目将导致此处的问题。
要点是有两个 COM 服务器,项目 1 和项目 2。如果项目 2 具有某些依赖项(在本例中),并且在项目 1 之后加载,则将导致此错误。似乎发生了一些只触发一次的初始化。CoreWCF.WebHttp
如果加载顺序颠倒,使项目 2 在项目 1 之前加载,则一切都可以正常加载。
答:
如果使用 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 应用)。但是您可以对其进行配置,此处对此进行了更详细的描述:依赖于框架的部署模型
有多种方法可以修复它。一种解决方案是,在部署时,将生成文件的内容复制到 中,以强制第一个组件加载 Microsoft.AspNetCore.App 框架,因此其内容应为:ComProject2.runtimeconfig.json
ComProject1.runtimeconfig.json
{
"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
评论
runtimeconfig.template.json
Framework
Frameworks
评论