缺少清单资源异常来自于从UWP调用的PCL程序集代码

5

我的Visual Studio 2015解决方案包含以下项目:

  • .NET程序集
  • UWP程序集
  • PCL程序集
  • .NET单元测试库
  • UWP单元测试应用程序

PCL程序集包含一个通过项目中的RESX文件嵌入的字符串资源表以及一个简单的类,允许调用者从字符串资源表中获取字符串。PCL旨在允许在.NET和UWP程序集之间共享字符串。

当运行.NET Unit Test Library时,单元测试调用.NET程序集,后者从PCL程序集中获取字符串。这一点如预期一样工作。

当运行UWP Unit Test App时,单元测试调用UWP程序集,后者从PCL程序集中获取字符串。但是会出现以下异常消息:

System.Resources.MissingManifestResourceException:无法为包[guid]中的资源文件[blah]加载资源。

我尝试了这个解决方法,但是调用GetForViewIndependentUse()失败,并显示"ResourceMap Not Found"的COMException

发生了什么?这种调用链对于.NET单元测试堆栈是可以工作的。我已检查确保所有程序集的中性语言设置为"英语"。最好的方法是什么,以便在.NET程序集和UWP程序集之间共享字符串表?


"在包中"会告诉你出了什么问题,资源嵌入在程序集中,而不是包中。在UWP中,资源的处理方式完全不同,它们被编译成PRI blob并嵌入到包中。让ResourceManager从程序集中读取可能会有些棘手,考虑到卫星程序集在UWP中也无法使用,真的没有太好的主意。 - Hans Passant
1个回答

7
我最近几天一直在处理相同的“MissingManifestResourceException”错误。我还查阅了Microsoft博客文章和这篇关于Xamarin的MVP文章。应用了建议的解决方案后,我得到了与你相同的错误“ResourceMap Not Found”。
最后,我决定回到主要问题,并仔细检查了MSDN中有关错误“MissingManifestResourceException”的描述,它说:
“如果主程序集不包含中性文化的资源且缺少适当的卫星程序集,则会抛出此异常。”
来源:https://msdn.microsoft.com/en-us/library/system.resources.missingmanifestresourceexception(v=vs.110).aspx 所以,我只需前往PCL并设置“中性区域(语言)”。
1. 在“解决方案资源管理器”中,右键单击您的项目,然后单击“属性”。 2. 从左侧导航栏中选择“应用程序”,然后单击“程序集信息”。 3. 在“程序集信息”对话框中,从“中性语言”下拉列表中选择语言。 4. 单击“确定”。
来源:https://msdn.microsoft.com/en-us/library/bb385967.aspx 问题解决了!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接