我有两个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项目。
我通过转到保存资源文件的项目,向下滚动到它的ItemGroup,并添加与编译器期望的路径对应的逻辑名称来解决这个问题。
我的EmbeddedResource是这样的:
<ItemGroup>
<EmbeddedResource Update="Properties\TextResources.resx">
<Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>TextResources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
现在看起来是这样的
<ItemGroup>
<EmbeddedResource Update="Properties\TextResources.resx">
<Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>TextResources.Designer.cs</LastGenOutput>
<LogicalName>MyProject.Properties.Resources.resources</LogicalName>
</EmbeddedResource>
</ItemGroup>
对我来说,问题是将.resx文件和相关联的.cs文件从一个项目复制到另一个项目。两个项目都有相同的名称空间,所以这不是问题。
当我在解决方案资源管理器中注意到原始项目中的.resx文件依赖于.cs文件时,终于解决了这个问题:
MyResource.cs
|_ MyResource.resx
而在复制的项目中。cs文件依赖于。resx文件:
MyResource.resx
|_ MyResource.cs
原来在第二个项目中,.resx文件被设置为自动生成.cs文件。自动生成的.cs文件覆盖了从原始项目复制的.cs文件。
要修复此问题,请编辑复制项目中每个.resx文件的属性。自定义工具属性将被设置为类似ResXFileCodeGenerator的东西。清除.resx文件的自定义工具属性。您将需要从原始项目中重新复制.cs文件,因为它将被自动生成的文件覆盖。