首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# Assembly.GetManifestResourceNames()不返回资源名称

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

Stack Overflow用户
提问于 2014-10-06 16:37:37
回答 3查看 5.8K关注 0票数 1

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

代码语言:javascript
复制
    foreach (string res in System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames())
    {
        Console.WriteLine(res);
    }

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

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

我做错什么了?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-06 17:27:08

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

确实如此,但是它们存储在一个.resx文件中。就像frmMain.resx。该文件被转换为"blob",这是一个二进制数据块。由Resgen.exe生成,它具有.resources文件扩展名。这个blob是作为一个显式资源添加的。您可以看到代码中的.resources点。

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

票数 6
EN

Stack Overflow用户

发布于 2014-10-06 16:47:03

打开程序集dll (http://msdn.microsoft.com/en-us/library/f7dy01k1%28v=vs.110%29.aspx)。它将显示清单中的资源名称。如果您试图获得不同的名称,那么GetManifestResourceNames()不是您想要的

票数 0
EN

Stack Overflow用户

发布于 2014-10-07 08:21:36

@HansPassant:谢谢你完美的回答。

此代码:

代码语言:javascript
复制
    ResourceSet resSet = Properties.Resources.ResourceManager.GetResourceSet(Thread.CurrentThread.CurrentCulture, false, true);
    foreach (DictionaryEntry entry in resSet)
    {
        if (entry.Value is Image))
        {
            // Use the image
        }
    }

做我需要的事。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26220758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档