【问题标题】:Xamarin.Forms UWP with .NetStandard 2.0 and null resourcesXamarin.Forms UWP 与 .NetStandard 2.0 和空资源
【发布时间】: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


【解决方案1】:

终于找到原因了。

通过将 PCL 库转换为 .Net Standar,文件 AssemblyInfo.cs 通常不存在。所以中性语言定义会丢失。

我们使用德语 (de-DE) 作为默认语言。一旦我将Package.appxmanifest 中的默认语言从默认值en-US 更改为de-DE,就无法读取来自.Net 标准库的资源。

修复方法是,为 .Net 标准库(与 UWP 项目相同)显式定义 NeutralResourcesLanguage。这可以在手动创建的 AssemblyInfo.cs 中完成(不要忘记关闭 AssemblyInfo 的自动生成)或使用 [assembly: NeutralResourcesLanguage("de-DE")] 在现有类之一中声明此信息。

在此修复后,来自 .Net 标准库的资源也可以在 UWP 中正确使用。

【讨论】:

  • 这对我有用,但只是一个注释。如果您有多个 .NET 标准库,则必须为所有库添加默认语言,否则它将无法正常工作。
  • 除了上述步骤之外,我还需要克服点/斜线“怪癖”。如果在 resx 资源的名称中使用句点,这也将返回 null。见:stackoverflow.com/questions/28505933/…
猜你喜欢
  • 2020-05-10
  • 2018-05-06
  • 1970-01-01
  • 2018-07-19
  • 2017-01-22
  • 1970-01-01
  • 2017-09-01
  • 2020-04-22
  • 2017-04-21
相关资源
最近更新 更多