无需安装Microsoft.ML.OnnxRuntime NuGet包实例化含ML.NET模型的类
问题根因
你碰到的EntryPointNotFoundException报错核心原因是遗漏了ONNX Runtime的原生依赖:你之前添加的Microsoft.ML.OnnxRuntime、System.Buffers等均为托管层封装程序集,ONNX Runtime的核心逻辑全部在原生的onnxruntime.dll中,缺少这个原生DLL时托管层调用就会找不到入口函数。
具体解决步骤
完全可以在不安装NuGet包的前提下解决该问题,操作如下:
- 找到和你开发时引用的Microsoft.ML.OnnxRuntime版本完全一致的NuGet包,解压后进入
runtimes目录 - 根据第三方应用的运行架构(x86/x64/ARM64)选择对应子文件夹,比如64位Windows应用就进入
runtimes/win-x64/native目录,取出里面的onnxruntime.dll文件 - 把该原生
onnxruntime.dll和你之前已经收集到的所有托管DLL一起放到第三方应用的exe同级目录即可 - 如果你用的是GPU版本的ONNX Runtime,还需要把同目录下的
onnxruntime_providers_cuda.dll、onnxruntime_providers_tensorrt.dll等对应GPU加速 provider 的DLL一并放入,仅用CPU推理的话只需要基础的onnxruntime.dll即可
额外注意事项
- 必须保证原生
onnxruntime.dll的版本和你引用的Microsoft.ML.OnnxRuntime托管DLL版本完全一致,版本不匹配也会触发入口点找不到的报错 - 要提前确认第三方应用的运行架构,32位运行的应用不能使用x64架构的原生DLL
- 不管目标应用是.NET Framework还是.NET Core/.NET 5+版本,只要原生DLL放在应用的默认加载目录(exe同级目录)就可以正常被识别,不需要额外添加配置文件
内容的提问来源于stack exchange,提问作者Semen
相关产品推荐
相关产品推荐

