我有两个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的回答)

其他回答

我只是在WPF项目中碰到了同样的异常。问题发生在我们最近移动到另一个名称空间(ProblemAssembly)的程序集中。支持ProblemAssembly.Controls)。试图从程序集中存在的第二个资源文件访问资源时发生异常。

事实证明,附加的资源文件没有正确地将引用从旧的名称空间名称移动到新的名称空间名称。

在资源文件的designer.cs中,有一个静态属性用于获取ResourceManager。在该getter中,字符串仍然引用旧的名称空间。一旦将其纠正为新的名称空间,问题就解决了:

global::System.Resources.ResourceManager temp = 
     new global::System.Resources.ResourceManager(
          "ProblemAssembly.Support.Properties.Stuff", typeof(Stuff).Assembly);

本来应该是:

global::System.Resources.ResourceManager temp = 
     new global::System.Resources.ResourceManager(
          "ProblemAssembly.Controls.Properties.Stuff", typeof(Stuff).Assembly);

当我们使用

HttpContext.GetGlobalResourceObject()

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

在一个NetCore项目中有类似的问题,我注意到在我添加了我的迁移(让我们将其命名为WhateverMigration)后,作为EmbeddedResource的.resx文件引用没有添加到.csproj中,即使一切看起来都很好。所以我打开我的。csproj文件,添加:

<EmbeddedResource Update="Migrations\202107071914322_WhateverMigration.resx">
    <Generator></Generator>
    <DependentUpon>202107071914322_WhateverMigration.cs</DependentUpon>
</EmbeddedResource>

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

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

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

对我来说,问题是将.resx文件和相关联的.cs文件从一个项目复制到另一个项目。两个项目都有相同的名称空间,所以这不是问题。

当我在解决方案资源管理器中注意到原始项目中的.resx文件依赖于.cs文件时,终于解决了这个问题:

MyResource.cs
|_ MyResource.resx

而在复制的项目中。cs文件依赖于。resx文件:

MyResource.resx
|_ MyResource.cs

原来在第二个项目中,.resx文件被设置为自动生成.cs文件。自动生成的.cs文件覆盖了从原始项目复制的.cs文件。

要修复此问题,请编辑复制项目中每个.resx文件的属性。自定义工具属性将被设置为类似ResXFileCodeGenerator的东西。清除.resx文件的自定义工具属性。您将需要从原始项目中重新复制.cs文件,因为它将被自动生成的文件覆盖。