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



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

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

我使用后面的代码直接调用本地化类,如图所示,它运行良好。

但如果我在调试模式下运行它,它会给我一个FileIONotFound异常,说InvalidImage。(我不知道为什么)

指南和谷歌告诉我需要关闭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 下

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

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

我遇到了完全相同的问题,下面是我从Xamarin支持处得到的响应:

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

正如Ognjen Sujagic所说,调试器正在寻找resx文件的本地化版本。因此,如果你在美国,请复制你的Strings.resx文件并将其命名为Strings.en-US.resx,或者使用你的设备所在的任何位置。这样你就不应该再遇到异常了。

最新更新