C#调用Tesseract报错System.DllNotFoundException

程序在C#中使用Tesseract OCR时,发布后出现System.DllNotFoundException错误,提示找不到leptonica-1.78.0.dll。问题在于发布时未将所有dll文件包含进安装包。解决方案是将x86和x64文件夹完整复制到程序根目录,因为Tesseract会在此目录下寻找对应的dll文件。
摘要由CSDN通过智能技术生成

C#调用Tesseract报错System.DllNotFoundException

一、程序发布安装后出现错误

在使用C#语言编写程序,调用Tesseract——OCR识别引擎时,在程序调试阶段不会出现任何错误,但当发布程序后,在自己电脑或目标主机安装程序并运行时,可能会莫名其妙程序崩溃,错误信息提示System.DllNotFoundException错误,使用VS调试发现错误信息为:
System.Reflection.TargetInvocationException:“调用的目标发生了异常。”
内部异常
DllNotFoundException: Failed to find library “leptonica-1.78.0.dll” for platform x64.

如下图所示
在这里插入图片描述
经过仔细分析并上网查找资料,发现错误引发原因并不是Tesseract版本过高或系统缺少VC++2015等程序,因为在调试阶段程序可以正常运行,而在发布安装时报错缺少dll文件,说明最大的可能是程序在发布时可能没有将全部dll文件复制进安装包内。

二、解决该bug方法

通过调试发现错误原因是缺少leptonica-1.78.0.dll,而在通过nuget下载的Tesseract包内存在该dll文件,并且x86和x64文件夹下各有一个,因此将对应位数的dll复制到程序根目录下,再运行程序,发现依然提示找不到leptonica-1.78.0.dll。
后面经过各种排查发现,将x86或x64文件夹整个复制到程序根目录下,程序能够正常运行,根本原因是Tesseract并不是从程序根目录下寻找dll文件,而是先寻找根目录下有无x86或x64文件夹,如果有再从文件夹下寻找dll文件,这点与通常从根目录下寻找dll文件不一样,导致debug了很长时间才解决。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值