我正在将托管 32 位 COM 组件从 .NET Framework 4.8 迁移到 .NET 6。Regsvr32 将在开发计算机上注册其 xxx.comhost.dll,但不会在非开发计算机上注册:它失败并显示错误消息“模块‘xxx.comhost.dll’已加载,但对 DllRegisterServer 的调用失败,错误代码为 0x80008083。”
错误描述为“CoreHostLibMissingFailure 0x80008083 -2147450749 131 缺少依赖库之一。通常当 hostfxr、hostpolicy 或 coreclr 动态库不存在于预期位置时。可能意味着安装已损坏或不完整”
开发计算机上安装的 .NET 6.X 运行时实际上已安装在目标 VM 上。组件的运行时配置如下
{
"runtimeOptions": {
"tfm": "net6.0",
"rollForward": "LatestMinor",
"frameworks": [
{
"name": "Microsoft.NETCore.App",
"version": "6.0.0"
},
{
"name": "Microsoft.WindowsDesktop.App",
"version": "6.0.0"
}
],
"configProperties": {
"System.Reflection.Metadata.MetadataUpdater.IsSupported": false
}
}
}
关于可能缺少哪个依赖项或配置错误有什么建议吗?
缺少的依赖项是 Microsoft Windows 桌面运行时 - 6.X.XX (x86)。
不知何故,正确的 (x86) .NET 6.0 运行时在某个时刻找到了进入开发计算机的方式,即使它没有在控制面板的“添加/删除程序”中明确列出。目标计算机与开发计算机一样,显式安装了 .NET 6.0 运行时 (x64),但此安装程序没有带来所需的 32 位二进制文件..