Xamarin表单本地化在Android调试模式下引发异常

时间:2019-01-07 12:26:49

标签: android xamarin.forms localization

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

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

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

但是,如果我以调试模式运行它,它将给我File IO NotFound异常,提示无效映像。 (我不知道为什么)

该指南和Google告诉我,我需要关闭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

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

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

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

2 个答案:

答案 0 :(得分:0)

我遇到了完全相同的问题,这是我从Xamarin支持部门得到的答复:

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

答案 1 :(得分:0)

就像Ognjen Sujagic所说,调试器正在寻找resx文件的本地化版本。因此,如果您在美国,请复制Strings.resx文件并将其命名为Strings.en-US.resx,或使用设备所在的任何本地名称。然后,您不再应该获得例外。 / p>