具有.resx资源的Windows Phone 8.1上的MissingManifestResourceException

时间:2014-10-01 11:19:47

标签: windows-runtime windows-phone windows-phone-8.1 embedded-resource resx

我正在开发一款同样面向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应用程序已上市,一切都很顺利。

4 个答案:

答案 0 :(得分:11)

我们的团队遇到了类似的问题,该问题被追溯到运行时而不是PCL,WinRT组件或应用程序包。也就是说,资源存在于PCL程序集中,位于应用程序包resources.pri文件中,但在运行时无法找到。

此处有一个有效的Microsoft Connect报告:

https://connect.microsoft.com/VisualStudio/feedback/details/991028/issue-using-resx-files-on-winrt-apps-windows-phone-and-windows

我们的解决方法是让WinRT组件向每个引用的PCL的每个生成的Resources类中注入我们自己派生的ResourceManager,它将调用重定向到WinRT ResourceLoader。我写了一篇博客文章,描述了解决方法:

http://blogs.msdn.com/b/philliphoff/archive/2014/11/19/missingmanifestresourceexception-when-using-portable-class-libraries-in-winrt.aspx

答案 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个评论的声望点。