我正在尝试利用共享项目概念在 WPF 项目和 Android (Xamarin.Forms) 之间共享客户端应用程序逻辑。在这两个项目中,我想使用相同的可本地化文本,因此,将资源文件(带有文本)移动到共享项目对我来说是合乎逻辑的。
以下示例来自 WPF 项目,但面临的问题与共享项目有关,而不是 WPF。
在基于 XAML 的视图中的 WPF 项目中,我按如下方式访问字符串值:
<TextBlock Text="{x:Static i18n:Strings.WelcomeMessage}" />
该文件Strings.resx
及其翻译位于文件夹I18N
中,即。它们没有放在项目的根目录中。因此生成public class Strings
的被放置到命名空间TestApp.I18N
。当 I18N 文件夹直接属于 WPF 项目时,一切正常,但如果我将 I18N 移动到共享项目,WPF 应用程序会崩溃,但异常:
找不到适合指定区域性或中性区域性的任何资源。确保“TestApp.I18N.Strings.resources”在编译时已正确嵌入或链接到程序集 WPF,或者所需的所有附属程序集都是可加载和完全签名的。
如果我使用一些反汇编工具查看已编译的程序集,我可以看到两种编译之间的区别:
- 在 I18N 文件夹属于共享项目的编译中,我看到名为的资源
TestApp.Strings.resources
- 在 I18N 文件夹属于 WPF 项目的编译中,我看到名为的资源
TestApp.I18N.Strings.resources
它实际上很好地解释了为什么在第一种情况下应用程序崩溃。并且很清楚可以使用什么解决方法(我可以将Strings.resx
其与项目根目录相关联)。但我觉得在共享项目中拥有资源并不是一个好主意,因为缺乏适当的支持。有人可以分享自己在这个方向上的经验吗?为什么编译器对共享项目的资源文件的解释略有不同?