【问题标题】:Xamarin Form localization throw exception with Android debug modeXamarin Form 本地化在 Android 调试模式下抛出异常
【发布时间】:2019-10-01 20:20:24
【问题描述】:

我完全按照以下指南中的内容进行操作:

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/{我的项目程序集名称}。资源.dll

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

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

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

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

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

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

【问题讨论】:

  • 您下载了这个演示并测试了您的环境吗?如果你仍然会有这个错误信息? developer.xamarin.com/samples/xamarin-forms/…我在实验室运行这个demo测试,正常。 Xamarin.forms 版本为 3.4.0.1008975,Visual Studio Enterprise 2017 版本为 15.9.4;我在 android 7.0 和 android 8.0 中运行 demo,它们都可以。

标签: android xamarin.forms localization


【解决方案1】:

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

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

【讨论】:

  • 尝试突出显示关键字并明确格式,这将有助于为其他人找到答案
  • 忽略异常不是答案,而是解决方法。应该回答的问题是如何以 Xamarin 正在寻找的格式创建文件,以便一开始就没有异常。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多