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


当前回答

一种方法是将共享的类/资源放在单独的类库项目中,并在两个网站中引用它们。

其他回答

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

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

在将Windows Forms csproj迁移到新的sdk风格的项目格式时,也会遇到这种异常。如果子文件夹中有任何窗体或用户控件,则*.;resx文件将使用包含子文件夹的名称空间生成,该名称空间可能与*. designer .cs名称空间不匹配。解决方案是在csproj中添加如下内容:

<EmbeddedResourceUseDependentUponConvention>true</EmbeddedResourceUseDependentUponConvention>

当我尝试共享资源时。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文件,因为这是自动生成的。

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

一种方法是将共享的类/资源放在单独的类库项目中,并在两个网站中引用它们。