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

UiPath NuGet活动组件中Tesseract无法找到x86平台leptonica-1.80.0.dll的解决方案求助

Troubleshooting "Failed to find library 'leptonica-1.80.0.dll' for platform x86" in UiPath Custom Activity NuGet Package

我之前在UiPath自定义活动里处理原生依赖时也碰到过类似问题,咱们一步步来排查解决你的leptonica/tesseract库找不到的问题:

1. 确认NuGet包内容与本地复制设置

  • 首先检查Visual Studio项目里所有原生DLL(包括x86/x64目录下的leptonica-1.80.0.dll、tesseract41.dll,还有tessdata下的训练数据文件)的Copy Local属性是否设为True。UiPath需要这些文件被正确复制到运行目录,不然就会找不到。
  • 解压你的NuGet包(把.nupkg改成.zip),确认内部结构和你本地的lib/net目录一致:x86、x64、tessdata子目录都完整,所有文件都在对应位置。如果Visual Studio打包时漏掉了非托管库,手动在.nuspec文件里添加文件包含规则:
    <files>
      <file src="lib/net/x86/*.dll" target="lib/net/x86" />
      <file src="lib/net/x64/*.dll" target="lib/net/x64" />
      <file src="lib/net/tessdata/*.traineddata" target="lib/net/tessdata" />
      <file src="lib/net/Tesseract.dll" target="lib/net" />
      <file src="lib/net/YourCustomActivity.dll" target="lib/net" />
    </files>
    

2. 强制UiPath运行时使用x86架构

  • UiPath默认可能以AnyCPU模式运行,但原生依赖分平台的话,得明确指定架构:
    • 打开你的UiPath项目,进入项目设置 -> 常规,把目标框架设为和你的组件匹配的版本(比如UiPath常用的.NET Framework 4.6.1)。
    • 切换到运行时选项卡,把平台设为x86,重启UiPath Studio后再测试。
  • 另外,如果你用的是安装版UiPath,默认启动的是64位的UiRobot,你可以手动启动C:\Program Files (x86)\UiPath\Studio\UiRobot.exe(x86版本)来运行流程,看是否能找到库。

3. 代码中手动设置原生库加载路径

  • Tesseract.NET加载依赖时,可能不会自动遍历x86/x64子目录,你可以在自定义活动的初始化代码里手动添加库搜索路径:
    using System.IO;
    using System.Reflection;
    using System.Runtime.InteropServices;
    
    // 在活动构造函数或Execute方法开头添加以下代码
    var assemblyDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
    var platformDir = RuntimeInformation.ProcessArchitecture == Architecture.X86 ? "x86" : "x64";
    var nativeLibPath = Path.Combine(assemblyDir, platformDir);
    
    // 调用Windows API添加DLL搜索目录
    AddDllDirectory(nativeLibPath);
    
    // 声明所需的Windows API函数
    [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
    private static extern bool AddDllDirectory(string lpPathName);
    
    这样能确保程序运行时优先去对应平台的子目录查找原生库。

4. 检查UiPath的工作目录

  • UiPath运行流程时的工作目录可能和你本地测试应用不一样,导致相对路径失效。你可以在调试时输出当前工作目录确认:
    Console.WriteLine($"当前工作目录: {Directory.GetCurrentDirectory()}");
    
    如果发现工作目录不是组件所在目录,就用程序集的绝对路径来拼接tessdata和原生库的路径,避免相对路径的问题。

5. 利用UiPath的原生依赖处理机制

  • UiPath支持通过.targets文件自动复制原生依赖到流程输出目录,你可以试试这个方法:
    • 在NuGet包的build目录下创建YourCustomActivity.targets文件,内容如下:
      <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
        <Target Name="CopyNativeDependencies" BeforeTargets="Build">
          <ItemGroup>
            <NativeLibsX86 Include="$(MSBuildThisFileDirectory)..\lib\net\x86\*.dll" />
            <NativeLibsX64 Include="$(MSBuildThisFileDirectory)..\lib\net\x64\*.dll" />
            <TessData Include="$(MSBuildThisFileDirectory)..\lib\net\tessdata\*.traineddata" />
          </ItemGroup>
          <Copy SourceFiles="@(NativeLibsX86)" DestinationFolder="$(OutputPath)x86" />
          <Copy SourceFiles="@(NativeLibsX64)" DestinationFolder="$(OutputPath)x64" />
          <Copy SourceFiles="@(TessData)" DestinationFolder="$(OutputPath)tessdata" />
        </Target>
      </Project>
      
    • 这样当UiPath安装你的NuGet包时,会自动把所有原生依赖复制到流程的输出目录,保证运行时能找到它们。

内容的提问来源于stack exchange,提问作者Maurizio Bruccoleri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 00:42:44