我想遍历给定.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-Reflector打开程序集时,我也可以看到这些资源。
答案 0 :(得分:3)
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!
}
}