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

引用onnxruntime 1.10/1.16的C#项目加载失败求助

问题排查与解决建议

核心问题梳理

基于.NET 4.7.2的项目长期使用onnxruntime 1.10,开发环境运行正常,但在其他机器上直接复制可运行的bin目录后,始终报“Failed to load file”错误。目标机已验证支持onnxruntime 1.10/1.16的最简测试代码,VC redist、PATH(含CUDA/CUDNN)配置均正常。

排查线索与解决步骤

  • 核对架构与包一致性
    确认项目平台目标(x86/x64)在开发机和目标机完全一致,避免AnyCPU模式下的自动架构匹配问题。同时检查项目是否混用了Microsoft.ML.OnnxRuntime和Microsoft.ML.OnnxRuntime.Gpu包,确保bin目录中的DLL与依赖包版本完全对应。

  • 分析DLL依赖链
    使用dumpbin /dependents <onnxruntime.dll路径>命令,或Dependency Walker工具,检查onnxruntime核心DLL的依赖项:

    • 确认VC redist版本与onnxruntime 1.10要求的版本匹配(需对应VS2019的VC redist)
    • 验证CUDA/CUDNN版本是否符合onnxruntime 1.10的官方要求(CUDA 11.4、CUDNN 8.2.2),版本不匹配会导致GPU provider加载失败
  • 检查项目配置与加载逻辑
    对比最简测试项目与实际项目的app.config:排查是否存在错误的bindingRedirect配置,导致依赖库版本冲突;检查是否启用了影子复制(Shadow Copy),导致bin目录的DLL未被正确读取。
    同时核对实际项目中加载onnxruntime的代码,确认没有自定义加载路径或环境变量修改覆盖了正确的PATH配置。

  • 验证文件完整性与权限
    用哈希工具对比开发机与目标机bin目录中onnxruntime相关DLL的哈希值,确认文件未在复制过程中损坏。同时检查目标机bin目录的文件权限,确保程序有读取和执行DLL的权限。

  • 启用详细日志定位问题
    在项目中添加onnxruntime日志输出,获取更具体的加载失败细节:

    var env = OrtEnv.Instance();
    env.SetLogLevel(OrtLoggingLevel.ORT_LOGGING_LEVEL_VERBOSE);
    env.SetLogFunction((level, category, message) =>
    {
        File.AppendAllText("onnx_runtime_log.txt", $"[{level}] [{category}] {message}\n");
    });
    
    // 原加载代码
    SessionOptions opt = new SessionOptions();
    try
    {
        var opt2 = SessionOptions.MakeSessionOptionWithCudaProvider(0);
        opt = opt2;
    }
    catch (Exception ee)
    {
        hasGPU = false;
        MessageBox.Show(ee.Message);
    }
    

    运行后查看日志,可定位到具体是哪个依赖缺失或初始化环节出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 14:52:23