我们.Net程序集一般来讲是有嵌入式资源的,通常在Winform中,我们把这些图片,图标,字体文件等编译成嵌入式资源:
而WPF中加入了一种新的编译类型, Resource。WPF的资源就如同你所说的,我们可以通过Pack Uri (http://msdn.microsoft.com/zh-cn/library/aa970069.aspx)来获取,这大大方便我们WPF的程序的开发和资源的整合(XAML源码文件在编译后生成的Baml文件其实也是被存放在WPF Resource中的)
不过,虽然WPF用了新的方式管理资源,但是它还是和嵌入资源一样存放在程序集相同的资源块中。如下图,我在一个WPF程序中加入了一个嵌入资源和资源,他们同时在程序集资源中(通过反射工具可以看到)
不管你是用那种方式来存储资源信息,我们都可以通过反射的代码来读取他们:
StringBuilder sb = new StringBuilder();
Assembly assembly = Assembly.GetExecutingAssembly();
string[] names = assembly.GetManifestResourceNames();
foreach (string name in names)
{
//assembly.GetManifestResourceInfo(name).ResourceLocation;
Stream st = assembly.GetManifestResourceStream(name);
try
{
using (ResourceReader resourceReader = new ResourceReader(st))
{
sb.AppendLine(name);
foreach (DictionaryEntry resourceEntry in resourceReader)
{
sb.AppendLine("\t|- " + resourceEntry.Key);
}
}
}
catch (System.ArgumentException ex)
{
sb.AppendLine(name);
}
}
MessageBox.Show(sb.ToString());
例子下载:https://skydrive./?cid=51b2fdd068799d15#cid=51B2FDD068799D15&id=51B2FDD068799D15%21888