在 .NET MAUI Android 中找不到语言包

Curtis Chau
Curtis Chau
Updated: 2026年6月29日

在.NET MAUI Android项目中加载非英语语言(例如中文)时,即使训练数据位于AndroidAsset,运行时也可能会失败。

System.IO.FileNotFoundException: Language Pack Not Found: chi_sim.traineddata
Text

从Visual Studio Code或CLI构建MAUI Android项目时可能会跳过解决IronOCR所需的语言数据文件。 *.traineddata文件从未被打包到APK中,因此引擎在运行时无法找到它们。

解决方案

1. 在Visual Studio 2022中构建

在完整的Visual Studio 2022 IDE(v17.10或更高版本)中打开并构建项目。 完整的IDE在构建过程中将依赖项包括在Android APK中,而CLI和VS Code路径可能会遗漏它们。

2. 重新定位OcrData文件夹

构建后,将OcrData/chi_sim.traineddata。

ProjectRoot/
├── OcrData/
│   └── chi_sim.traineddata
├── Resources/
│   └── Fonts/
│       └── NotoSansSC-Regular.ttf
├── MyMauiApp.csproj
Text

3. 将已训练的数据注册为Android资产

将重新定位的文件添加到您的.csproj中,以便它们能够与APK一起发布。

<ItemGroup>
  <AndroidAsset Include="OcrData\chi_sim.traineddata" />
  <AndroidAsset Include="ocrData\chi_tra.traineddata" />
</ItemGroup>
XML

4. 添加支持您的字符的字体

识别的文本仍然需要一个可以在应用程序UI中呈现的字体。 将Noto Sans SC这样的字体放入MauiProgram.cs中注册。

using Microsoft.Extensions.Logging;
namespace MauiApp2
{
    public static class MauiProgram
    {
        public static MauiApp CreateMauiApp()
        {
            var builder = MauiApp.CreateBuilder();
            builder
                .UseMauiApp<App>()
                .ConfigureFonts(fonts =>
                {
                    fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
                    fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
                });
#if DEBUG
            builder.Logging.AddDebug();
#endif
            return builder.Build();
        }
    }
}

调试提示

  • 确认NuGet包:确保IronOcr.Android已安装并恢复。
  • 打开日志记录以查看IronOCR使用的语言文件搜索路径:
IronSoftware.Logger.LoggingMode = IronSoftware.Logger.LoggingModes.All;
IronSoftware.Logger.LogFilePath = "OcrMaui.log";
警告: 在Assets/下面的.tessdata文件夹在CLI或VS Code构建时可能会静默失败,因此有时需要手动重新定位.traineddata文件。

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

阅读更多

准备开始了吗?

Nuget Downloads 6,357,159版本:2026.11刚刚发布