Missing ManifestResourceException 访问嵌套在 .cs file 下的 .resx 文件
本文关键字:file 下的 resx 文件 cs ManifestResourceException 访问 嵌套 Missing | 更新日期: 2023-09-27 18:32:51
当使用.csproj
文件中的DependentUpon
元素将.resx
文件嵌套在.cs
文件下,然后使用包装器访问资源时,会抛出MissingManifestResourceException
。
消息内容如下:
找不到适合指定区域性或非特定区域性的任何资源。 确保"Namespace.Resource.resources"在编译时正确嵌入或链接到程序集"程序集"中,或者所需的所有附属程序集都是可加载的并已完全签名。
示例代码:
MessageBox.Show(Resource.Key);
为什么会发生此错误?
MSBuild 目标PrepareResourceNames
(PrepareResources
也调用 ResGen
所依赖的)调用名为 CreateManifestResourceName
的任务。
[见Microsoft.Common.targets
]
此任务创建.resources
文件的名称。对于 C#,创建名称的实际方法是在 Microsoft.Build.Tasks.CreateCSharpManifestResourceName
中CreateManifestNameImpl
。此方法检查.resx
文件是否具有.cs
文件作为父文件。在这种情况下,它会在.cs
文件中搜索它可以找到的第一个完全限定的类名,并将其作为.resources
文件名。
[见Microsoft.Build.Tasks.v4.0.dll
]
.resx
包装器不希望更改此文件名,因此会引发异常。
我想此行为是为 WinForms 本地化实现的,该本地化将其资源嵌套在相应的表单或控件下。
我决定不嵌套.resx
文件。可能的解决方案是实现 MSBuild 为其提供挂钩的CreateCustomManifestResourceName
任务。