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 中正确使用。
我们目前正在将我们的 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 中正确使用。