我正在开发一款同样面向Android(Xamarin)的Windows Phone 8.1应用
我一直在PCL上添加我的字符串资源(.resx)并在我的启动器项目中引用它们以在我的视图中使用它,这在WP 8.1 silverlight上工作正常,但在我配置项目时要在WinRt上工作并在设备上运行它,由于某种原因我总是得到一个MissingManifestResourceException。我已经尝试了解决这个问题的所有解决方案而没有任何成功。
请注意,在模拟器上一切正常,当解决方案配置器设置为Debug时,它也适用于设备和模拟器。这里唯一的组合是设备和发布。
应用源代码位于Github。
我能够创建一个简单的项目来复制这个问题,基本上它是一个WP 8.1应用程序和一个带有嵌入资源的PCL项目,Download Link
任何人都有任何想法?
编辑:在进行了一些更多的测试后,我尝试运行一个旧的Windows 8.1应用程序,我使用相同的本地化模型,并出现相同的问题,因此它接缝是一个工具问题而不是配置问题,因为Windows 8.1应用程序已上市,一切都很顺利。答案 0 :(得分:11)
我们的团队遇到了类似的问题,该问题被追溯到运行时而不是PCL,WinRT组件或应用程序包。也就是说,资源存在于PCL程序集中,位于应用程序包resources.pri文件中,但在运行时无法找到。
此处有一个有效的Microsoft Connect报告:
我们的解决方法是让WinRT组件向每个引用的PCL的每个生成的Resources类中注入我们自己派生的ResourceManager,它将调用重定向到WinRT ResourceLoader。我写了一篇博客文章,描述了解决方法:
答案 1 :(得分:9)
我今天已经到了最底层。在捆绑应用程序包时,将删除不属于应用程序使用的语言的依赖项中的资源。要防止这种情况发生,请将以下程序集级属性添加到应用程序中。
using System.Resources;
[assembly: NeutralResourcesLanguage("en")]
答案 2 :(得分:0)
我有同样的行为。今天我创建了一个新的PCL库(带有另一个名称)并将resx文件复制到该项目中。我修改了所有引用,现在我的WinRt(Windows Store)应用程序中的一切正常!
便携式类库名中有字符串'resources'。也许这就是问题!
答案 3 :(得分:0)
我能够重现此问题,启动DVD示例,不幸的是在我的项目中。我有一个WP Silverlight 8.1项目注册一个Windows运行时组件后台任务,它们都使用可移植类库共享一些常见的本地化字符串作为资源(.resx)等。在调用任何属性以在生成的.Design.cs类(仅Release + Device)上获取字符串时,后台任务抛出异常。
为了解决这个问题,我试图直接使用ResourceManager和/或将.resx文件直接添加到后台任务中。
我最终将所需的字符串移植到.resw文件,并通过后台任务项目中的Windows.ApplicationModel.Resources.ResourceLoader使用new "WinRT preferred" way。
在我看来,ResourceManager在发行版中不再与Windows Runtime兼容。
这不是一个必要的答案,但总比没有好,因为我没有50个评论的声望点。