也许我误解了Assembly.GetManifestResourceNames()的含义。我想浏览一下我的应用程序的资源,下面是我正在做的事情:
foreach (string res in System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames())
{
Console.WriteLine(res);
}我的应用程序有几个图像资源,我希望上面的代码列出它们的名字。相反,我得到的只是这个输出:
我做错什么了?
发布于 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()方法中看到这一点。
发布于 2014-10-06 16:47:03
打开程序集dll (http://msdn.microsoft.com/en-us/library/f7dy01k1%28v=vs.110%29.aspx)。它将显示清单中的资源名称。如果您试图获得不同的名称,那么GetManifestResourceNames()不是您想要的
发布于 2014-10-07 08:21:36
@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
}
}做我需要的事。
https://stackoverflow.com/questions/26220758
复制相似问题