在另一个程序集中的字符串资源中循环
本文关键字:字符串资源 循环 集中 另一个 程序 程序集 | 更新日期: 2023-09-27 18:29:55
我想遍历给定.NET程序集中的所有字符串资源。为此,我想出了以下代码:
public void IterateResourcesInAssembly(string filename)
{
var assembly = Assembly.LoadFile(filename);
string[] resourceNames = assembly.GetManifestResourceNames();
foreach (var resourceName in resourceNames)
{
var resourceManager = new ResourceManager(resourceName, assembly);
var resourceSet = resourceManager.GetResourceSet(CultureInfo.CurrentCulture, true, true);
// Exception is thrown!
}
}
这里的问题是,GetResourceSet总是抛出一个异常:
缺少ManifestResourceException对于给定的文化或中性文化,找不到任何资源。。。
但我敢肯定这不是真的。该程序集包含大量英语和德语资源。当用.NET反射器打开程序集时,我也可以看到这些资源。
GetManifestResourceNames()方法返回带有扩展名的资源名称。在创建资源管理器实例之前,您必须从资源名称中删除扩展,并只传递资源基名称。
public void IterateResourcesInAssembly(string filename)
{
var assembly = Assembly.LoadFile(filename);
string[] resourceNames = assembly.GetManifestResourceNames();
foreach (var resourceName in resourceNames)
{
string baseName = Path.GetFileNameWithoutExtension(resourceName);
ResourceManager resourceManager = new ResourceManager(baseName, assembly);
var resourceSet = resourceManager.GetResourceSet(CultureInfo.InvariantCulture, true, true);
// Exception is thrown!
}
}