C#Assembly.GetManifestResourceNames()不返回资源名称

Wol*_*and 0 .net c# resources

也许我误解了Assembly.GetManifestResourceNames()的含义.我想浏览我的应用程序的资源,这就是我正在做的事情:

    foreach (string res in System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames())
    {
        Console.WriteLine(res);
    }
Run Code Online (Sandbox Code Playgroud)

我的应用程序有几个图像资源,我希望上面的代码列出他们的名字.相反,我得到的只是这个输出:

  • G19SysMon.frmMain.resources
  • G19SysMon.frmSetup.resources
  • G19SysMon.Properties.Resources.resources

我弄错了什么?

Han*_*ant 6

我的应用程序有几个图像资源

确实如此,但它们存储在.resx文件中.像frmMain.resx.该文件被转换为"blob",即单块二进制数据.由Resgen.exe生成,它具有.resources文件扩展名.并且 blob被添加为明显资源.您可以使用代码查看.resources blob.

在blob中找回原始资源是ResourceReader类的工作.您可以在for-each循环中使用它来枚举原始资源.但是您通常使用ResourceManager类,这是ResourceReader之上的额外层.它支持本地化,从卫星文件中读取资源.Winforms使用ComponentResourceManager,一个派生类,并自动调用ApplyResources().您可以在InitializeComponent()方法中看到这一点.