在另一个程序集中的字符串资源中循环

本文关键字:字符串资源 循环 集中 另一个 程序 程序集 | 更新日期: 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!
            }
        }