也许我误解了Assembly.GetManifestResourceNames()的含义。我想浏览我的应用程序资源,这就是我正在做的事情:
foreach (string res in System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames())
{
Console.WriteLine(res);
}
我的应用程序有几个图像资源,我希望上面的代码列出它们的名称。相反,我得到的就是这个输出:
我出错了什么?
答案 0 :(得分:6)
我的应用程序有多个图像资源
确实如此,但它们存储在.resx文件中。像frmMain.resx。该文件被转换为" blob",一块二进制数据。它由Resgen.exe生成,具有.resources
文件扩展名。并且 blob被添加为清单资源。你会看到带有代码的.resources blob。
在blob中找回原始资源是ResourceReader类的工作。您可以在for-each循环中使用它来枚举原始资源。但是您通常使用ResourceManager类,这是ResourceReader之上的额外层。它支持本地化,从卫星文件中读取资源。 Winforms使用ComponentResourceManager,一个派生类,并自动调用ApplyResources()。您可以在InitializeComponent()方法中看到这一点。
答案 1 :(得分:0)
使用ildasm(http://msdn.microsoft.com/en-us/library/f7dy01k1%28v=vs.110%29.aspx)打开程序集dll。这将显示清单中的资源名称。如果你想获得不同的名字,那么GetManifestResourceNames()就不是你想要的了
答案 2 :(得分:0)
@HansPassant:谢谢你的完美答复。
此代码:
ResourceSet resSet = Properties.Resources.ResourceManager.GetResourceSet(Thread.CurrentThread.CurrentCulture, false, true);
foreach (DictionaryEntry entry in resSet)
{
if (entry.Value is Image))
{
// Use the image
}
}
完全符合我的需要。