我有两个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项目。


当前回答

只有西比·伊兰戈斯的回答对我来说是不够的,所以我不得不:

右键单击资源文件 更改“Build Action”属性 编译为“嵌入式资源” 构建和部署

这将在您的/bin文件夹中生成一个App_GlobalResources,现在将该文件夹也复制到web应用程序的根目录

其他回答

就这种情况而言,检查包含资源的程序集是否将默认名称空间设置为相同的文本(Project->Properties->默认名称空间;在VS) 检查resx文件是否有BuildAction属性设置为“嵌入式资源” 享受……;)

当我们使用

HttpContext.GetGlobalResourceObject()

它会产生那个错误,除非我们用try/catch语句包装这个调用。

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

对我来说是这样的。在MyStrings.Designer.cs文件中:

global::System.Resources.ResourceManager temp = 
    new global::System.Resources.ResourceManager(
      "MyApplication.MyProject", typeof(MyStrings).Assembly);

我以为MyApplication。MyProject引用类的命名空间,而不是文件的目录。我把文件放在一个名为Resources的子目录中,但名称空间没有反映这一点。

我把它改成

global::System.Resources.ResourceManager temp = 
    new global::System.Resources.ResourceManager(
      "MyApplication.MyProject.Resources", typeof(MyStrings).Assembly);

它成功了!(我甚至不需要更新名称空间!)

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设置默认名称空间后,上面的代码行不再引起异常。