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


当前回答

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

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

其他回答

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

在我的例子中,我试图将一个Form从一个项目迁移到另一个项目。结果我只忘记添加Form。Resx到新项目。在窗体中,我使用了一些图标,因此它依赖于资源。

我在运行迁移命令时遇到了这个问题。在包管理器控制台中更新数据库。

公认的答案并不能解决我的问题。

我不得不改变构建行动从编译到嵌入式资源,它为我工作。

你可以使用以下步骤做到同样的事情:

右键单击迁移。 将“Build Action”属性“Compile”更改为“Embedded Resource” 执行Update-Database命令。

我只是在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);

当我尝试共享资源时。resx文件从一个c#项目到另一个c#项目,我得到了这个问题。将Form类移到其文件开头的建议是不合适的。我就是这样解出来的。您实际上使用了从第二个项目到第一个项目的链接,然后启用resource.designer.cs文件的再生。

删除第二个项目的Properties/Resources。resx文件 添加第一个项目的Properties/Resources。resx文件作为第二个项目中Properties文件夹的链接。不要将它添加到项目的根级别。 不要添加第一个项目的Properties/Resources.designer.cs! 关于第二个项目的资源的属性。ResXFileCodeGenerator作为CustomTool 右键单击资源。resx,然后选择“运行自定义工具”。这将生成一个新的designer.cs文件。

注意:我将避免编辑resource.designer.cs文件,因为这是自动生成的。