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了很长时间才解决。