【发布时间】:2018-04-27 11:57:25
【问题描述】:
我们目前正在将 Xamarin 项目从 PCL 迁移到 .Net Standard 2.0,这也是核心库项目格式。大多数事情都运作良好。我们在核心项目中使用 resx 文件进行本地化。这在 iOS 和 Android 上运行良好。
在 UWP 上,如果我尝试访问字符串 ressources,我会得到 null 作为值
var buttonText = AppResources.Cancel; // => null
相同代码的 PCL 版本运行良好。需要初始化吗?
在调试时我可以看到资源管理器有一个null ResourceSet,但_WinRTResourceManager 已填满。
【问题讨论】:
-
我尝试使用
.NetStandard 2.0创建Xamarin.Forms UWP。但我无法重现您的问题,AppResources在我身边有效。可以分享一个可以重现此问题的简单示例吗? -
谢谢。我创建了一个小型测试应用程序,UWP 可以工作。
ResourceManager看起来像在完整应用程序中(资源集和填充的 WinRT 部分为空)。如果我发现测试和完整应用程序之间的差异,我将编写解决方案。 -
我找到了原因。我们使用德语 (de-DE) 作为默认语言。一旦我将
Package.appxmanifest中的默认语言从默认值en-US更改为de-DE,就无法读取来自.Net 标准库的资源。解决方法是,为 .Net 标准库定义显式NeutralResourcesLanguage(与 UWP 项目相同)。这可以在手动创建的 AssemblyInfo.cs 中完成(不要忘记关闭 AssemblyInfo 的自动生成)或在现有的 classen[assembly: NeutralResourcesLanguage("de-DE")]中声明此信息 -
非常有帮助,您可以将您的评论转换为此问题的答案,并且mark 它已被稍后访问此主题的方便人士所接受,感谢您的理解。
-
@WebDucer 谢谢,解决了!我在我的 .NET Standard 类库中设置了
<NeutralLanguage>en-US</NeutralLanguage>,它开始工作了。
标签: xamarin.forms uwp resx .net-standard-2.0