Xamarin.Forms 具有 .NetStandard 2.0 和空资源的 UWP

Xamarin.Forms UWP with .NetStandard 2.0 and null resources

我们目前正在将我们的 Xamarin 项目从 PCL 转移到 .Net Standard 2.0,这也是核心库项目格式。大多数事情都运作良好。我们在核心项目中使用 resx 文件进行本地化。这适用于 iOS 和 Android.

在 UWP 上,如果我尝试访问字符串资源

,我会得到 null 作为值
var buttonText = AppResources.Cancel; // => null

相同代码的 PCL 版本运行良好。是否需要一些初始化?

在调试时我可以看到资源管理器有一个 null ResourceSet,但是 _WinRTResourceManager 已填充。

终于找到原因了

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

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

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

声明此信息

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