.Net Core 3.1项目部署到Ubuntu时无法加载Tesseract程序集如何解决
问题解决方案
前置检查
首先确认发布目录根目录下存在托管程序集Tesseract.dll,如果不存在,打开项目引用列表,找到Tesseract包的属性,将复制本地设置为True,重新发布即可。如果托管dll存在还是报错,按以下步骤处理原生依赖问题:
方案一:替换跨平台适配NuGet包(推荐,无需手动配置原生依赖)
- 卸载项目中当前引用的原版
Tesseract 4.1.1包 - 安装
Tesseract.Net.Bindings包的4.1.x分支对应版本,该包已适配Windows、Linux、Mac多平台原生依赖,发布时会自动输出对应平台的原生文件,无需手动复制 - 重新发布项目到Ubuntu即可直接运行
方案二:保留原4.1.1版本包手动配置
步骤1:安装Ubuntu系统依赖
在部署的Ubuntu服务器执行以下命令安装匹配版本的原生依赖:
sudo apt update sudo apt install -y tesseract-ocr=4.1.* libtesseract-dev=4.1.* libleptonica-dev
执行tesseract --version确认输出版本为4.1.x,和你项目引用的版本匹配。
步骤2:正确放置原生so文件
不要将so文件和Windows的dll混放在根目录的x86/x64文件夹,.Net Core运行时会按照runtime标识符从指定目录加载原生文件:
- 在发布目录根目录新建
runtimes文件夹 - 依次创建子目录
runtimes/linux-x64/native - 将Ubuntu上生成的
libtesseract41.so、liblept17x.so(x为你安装的leptonica版本号)放入上述native目录 - 给so文件添加可执行权限:
chmod +x 你的发布目录路径/runtimes/linux-x64/native/*.so
步骤3:指定Runtime发布项目
发布时不要使用可移植模式,指定Linux x64 runtime标识符:
dotnet publish -c Release -r linux-x64 --self-contained false
如果需要自包含发布,将参数改为--self-contained true即可。
异常排查
如果调整后还是报错,可在程序初始化阶段添加路径输出逻辑,确认运行时加载路径和你放置文件的路径一致:
Console.WriteLine($"程序运行根目录:{AppContext.BaseDirectory}");
内容的提问来源于stack exchange,提问作者Lemo
相关产品推荐
相关产品推荐

