我有一个使用多个.NET 6 COM组件的遗留应用程序。根据COM组件的加载顺序,某些组件将无法加载并出现错误(0x800080A5)。我已经上传了一个示例项目,将导致问题here。要点是有两个COM服务器,项目1和项目2。如果项目2具有某些依赖关系(在本例中为CoreWCF.WebHttp),并且在项目1之后加载,则会导致此错误。看起来好像发生了一些只触发一次的初始化。如果颠倒加载顺序,使项目2在项目1之前加载,那么一切都将正常加载。
CoreWCF.WebHttp
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框架,因此它的内容应该是:
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的文件,内容如下:
runtimeconfig.template.json
{ "frameworks": [ { "name": "Microsoft.AspNetCore.App", "version": "6.0.0" } ] }
型
的数据并且它将在构建时(第一次需要重建)被合并到ComProject1.runtimeconfig.json中。
1条答案
按热度按时间xyhw6mcr1#
如果您使用DebugView等工具运行exe,您将看到以下输出:
字符串
这是因为项目ComProject2隐含地需要
Microsoft.AspNetCore.App
框架,因为它依赖于CoreWCF.WebHttp
包。由于某些原因,.NET核心加载器无法在此COM方案中自动加载其他框架(exe不是.NET核心应用程序)。但您可以configure它,这里有更多详细信息:依赖于框架的部署模型
有多种方法可以修复它。一种解决方案是,* 在部署时 *,将生成的
ComProject2.runtimeconfig.json
文件的内容复制到ComProject1.runtimeconfig.json
中,以强制第一个组件加载Microsoft.AspNetCore.App框架,因此它的内容应该是:型
另一种解决方案是,如这里所解释的,在ComProject1的根目录下创建一个名为
runtimeconfig.template.json
的文件,内容如下:型
的数据
并且它将在构建时(第一次需要重建)被合并到
ComProject1.runtimeconfig.json
中。