C#onnxruntime模型部署时,无法在 DLL“onnxruntime”中找到名为“OrtGetApiBase”的入口点的解决方法

EntryPointNotFoundException: 无法在 DLL“onnxruntime”中找到名为“OrtGetApiBase”的入口点

一、只在类库项目中安装了NuGet包,没有在运行项目中安装

1.先创建一个OnnxLibrary类库项目,并安装NuGet包

建议直接装Microsoft.ML.OnnxRuntime.Gpu版本,因为兼容CPU推理,Microsoft.ML.OnnxRuntime版本,仅支持CPU推理

其依赖的包会自动安装

2.随意写一个onnx调用的类

using Microsoft.ML.OnnxRuntime;
using Microsoft.ML.OnnxRuntime.Tensors;
using System.Collections.Generic;
using System.Linq;

namespace OnnxLibrary
{
    public class ONNX
    {
        readonly InferenceSession model;
        public ONNX(string model_path,bool useGPU=true,int gpuDeviceId=0)
        {
            if (useGPU)
            {
                var gpuSessionOptoins = SessionOptions.MakeSessionOptionWithCudaProvider(gpuDeviceId);
                gpuSessionOptoins.InterOpNumThreads = 8;
                gpuSessionOptoins.IntraOpNumThreads = 8;
                gpuSessionOptoins.GraphOptimizationLevel = GraphOptimizationLevel.ORT_ENABLE_ALL;
                model = new InferenceSession(model_path, gpuSessionOptoins);
            }
            else
                model = new InferenceSession(model_path);
        }
        public void Run()
        {
            Tensor<float> inputData = new DenseTensor<float>(new[] { 1, 1, 1280, 1280 });
            var inputs = new List<NamedOnnxValue>
                {
                    NamedOnnxValue.CreateFromTensor("inputs", inputData)
                };
            var outputs = model.Run(inputs);
            var outputToFeed = outputs.First();
            Tensor<float> outputData = outputToFeed.AsTensor<float>();
        }
    }
}

3.创建一个控制台项目csID

随意创建的

4.引用该类库

4.调用ONNX类

using OnnxLibrary;
namespace csID
{
    class Program
    {
        static void Main(string[] args)
        {
            ONNX oNNX = new ONNX(@"model.onnx");
            oNNX.Run();
        }
    }
}

5.运行控制台项目

错啦~

重装NuGet包,错啦~

运行CPU推理,错啦~

解决方法:

在控制台项目中安装ONNXRuntime包即可

此刻该项目没有安装任何包

安装完成

再运行项目

错误        无法复制文件“C:\Users\user\Desktop\Test\packages\Microsoft.ML.OnnxRuntime.Gpu.1.16.3\runtimes\win-x86\native\onnxruntime.dll”,原因是找不到该文件。    csID  

错啦~

不要惊慌,项目默认首选32位,取消即可

再运行,过啦~

提示:

当你的解决方案中项目很多时可能会出现下面的错误

内部异常 1: FileLoadException: 未能加载文件或程序集“System.Runtime.CompilerServices.Unsafe, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040) 内部异常 2: FileLoadException: 未能加载文件或程序集“System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)

只需要在解决方案资源管理器中搜索System.Runtime.CompilerServices.Unsafe,即可找到所有引用该程序集的项目,检查并将其全部同一成一个版本的程序集即可

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值