首页 > 解决方案 > Xamarin Form 本地化在 Android 调试模式下抛出异常

问题描述

我遵循以下指南中的完全相同的内容:

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/localization/text?tabs=windows

我正在使用隐藏代码直接调用本地化类,如示例所示,它运行良好。

但是如果我在调试模式下运行它,它会给我 File IO NotFound 异常,说 Invalid Image。(我不知道为什么)

指南和谷歌告诉我我需要关闭 Android 项目中的快速部署,我确实这样做了。而且我仍然遇到同样的异常。

我还按照指南通过加载程序集来尝试调试,以查看是否找到了资源文件并且它的位置没有问题。

有人面临同样的问题吗?

我的资源文件位于我共享的 .net 标准 2.0 项目中。我正在使用最新的 Xamarin Form + Visual Studio 2017。

=====================

编辑:

我发现当它尝试加载本地化字符串时,它会从位于 android/bin/debug 文件夹中的 dll 文件中查找我的设备语言 en-CA:en-CA/{我的项目程序集名称}.resources.dll

但是,我只有两个资源文件:

  1. 中性语言,命名为 ClientResource.resx

  2. 日语,命名为 ClientResource.ja-JP.resx

我检查了调试文件夹中的所有文件,资源 dll 文件仅存在于 ja-JP/{我的项目程序集名称}.resources.dll 下

因此,如果我将设备语言更改为日语,它将在调试模式下正常工作。但是,任何其他语言都会抛出异常,而不是使用中性语言。

知道为什么它不使用中性语言吗?

标签: androidxamarin.formslocalization

解决方案


我遇到了完全相同的问题,这是我从 Xamarin 支持人员那里得到的回复:

发生的情况是,运行时确实在各个位置搜索请求的资源,直到找到可用的资源,在这种情况下,它首先搜索“en-US”资源(因为设备设置为“en-US”),然后它会尝试“en”,如果没有找到,它会转到默认值。这就是异常发生两次的原因。FileNotFoundExceptions 由运行时 API 处理,事实证明我随后在发布模式下进行了测试,即没有附加调试器,并且应用程序运行良好并显示了正确的文本字符串。此问题是因为当您在“异常设置”窗格中启用所有公共语言运行时异常时,您已明确要求调试器在 System.IO.FileNotFoundException 上中断。当您这样做时,无论是否最终处理异常,调试器都会中断。因此,此问题的解决方案是取消选中“异常设置”>“公共语言运行时异常”部分中的 System.IO.FileNotFoundException。进行上述更改后,您的应用程序将在调试模式下按预期工作。


推荐阅读