You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 16:24:02