迭代另一个程序集中的字符串资源

时间:2014-11-11 09:03:01

标签: c# .net .net-assembly embedded-resource

我想遍历给定.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打开程序集时,我也可以看到这些资源。

1 个答案:

答案 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!
            }
        }