You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET6 x64独立部署程序调用x86程序报hostfxr.dll failed错误如何解决

问题根因
  • 你采用self-contained模式发布的x64架构项目A,运行目录内置了x64版本的.NET运行时组件,包括hostfxr.dll,进程启动时默认会优先从当前工作目录加载依赖
  • 你调用的项目B为x86架构,启动时默认继承了项目A的工作目录,优先加载到了x64版本的hostfxr.dll,架构不匹配导致加载失败
修复方案

方案1(推荐,改动最小):显式指定项目B的工作目录

启动项目B时,将工作目录指定为项目B自身的所在文件夹,避免读取项目A目录下的x64运行时组件,参考代码:

var processInfo = new ProcessStartInfo
{
    FileName = @"此处替换为项目B的完整路径,例如D:\tools\projectB.exe",
    WorkingDirectory = @"此处替换为项目B所在的文件夹路径,例如D:\tools\",
    UseShellExecute = false
};
Process.Start(processInfo);

方案2:将项目B也做独立部署

将x86架构的项目B同样采用self-contained + win-x86参数单独发布,发布后的文件夹会自带x86版本的hostfxr.dll,启动时会优先读取自身目录下的正确版本文件,不会出现架构冲突。

方案3:修改项目A的发布模式

将项目A的发布模式从self-contained改为框架依赖部署(FDD),项目A的运行目录不会内置.NET运行时组件,项目B启动时会自动从系统全局的.NET运行时路径查找对应x86版本的hostfxr.dll,该方案需要提前在目标机器上安装x86版本的.NET 6桌面运行时。

方案4:统一两个项目的架构

如果项目B没有必须依赖x86的第三方组件,直接将项目B的目标平台改为x64和项目A保持一致,从根源消除架构不匹配的问题。

内容的提问来源于stack exchange,提问作者Kyeonghwan Jeong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 07:36:03