我有两个ASP。NET Web项目(ProjectA和projecb)。当ProjectA中的类正在实例化ProjectB中的一个类时,它使用了一个资源文件Blah。resx,我得到这个错误:

一个System.Resources类型的异常。mscorlib.dll中出现了MissingManifestResourceException',但在用户代码中没有处理。 无法找到适用于指定区域性或中性区域性的任何资源。确保“资源。等等。”资源“正确嵌入或链接到程序集”App_GlobalResources。Sn_flri6”,或者所有所需的附属程序集都是可加载的并具有全符号。

是什么导致的?

在微软的网站上有一篇关于http://support.microsoft.com/kb/318603的文章,它建议:

要解决此问题,请移动所有其他类定义,使它们出现在表单的类定义之后。

这是一个Windows窗体项目的解决方案,我不确定这是否也适用于Web项目。


当前回答

我发现删除designer.cs文件,从项目中排除resx文件,然后重新包含它通常会修复这类问题,遵循命名空间重构(根据CFinck的回答)

其他回答

似乎没有人提到过这个解决方案。真的很明显——但有一瞬间绊倒了我……

新资源文件的默认访问修饰符是内部(或VB.Net中的朋友)。 请确保将此更改为Public

(在resx设计器的顶部有一个下拉菜单用于访问修饰符)

This can be caused by mismatched namespaces. The second from top answer (Sibi Elango's) says to right-click the resx file, and change Build option to EmbeddedResource, but I had already done that and still had the error. The top answer (CFinck's) notes a way of fixing this via manually editing files, however, I had this problem in MonoDevelop, and had to set the default namespace to the same as the cs file which was calling for the resource (the file which contained code such as the code below)...

this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));

通过GUI设置默认名称空间后,上面的代码行不再引起异常。

仅仅因为您引用了项目B的DLL,并不意味着项目A的资源管理器知道项目B的App_GlobalResources目录。

您使用的是网站项目还是web应用程序项目?在后者中,Visual Studio应该允许您链接源代码文件(不确定前者,我从未使用过它们)。这是一个鲜为人知但很有用的特性,下面将对其进行描述。这样,您就可以将项目B资源文件链接到项目A。

我是这样解决的:

右键点击资源文件,然后选择属性 将“Build Action”属性编译为“Embedded Resource” 然后构建并运行

它工作得很完美。

在我的例子中,一系列考虑不良的全局文本替换无意中改变了资源设计器cs文件中的这一行。

由于该参数中的名称空间不再与类的名称空间匹配,因此应用程序在运行时会感到困惑。

检查设计器的名称空间是否与该行中的字符串参数匹配。