混淆资源和GetManifestResourceNames()

我一直在学习C#和visual C#IDE中的资源。 我现在很困惑。 我已经阅读了StackOverflow上的一些页面,比如这个如何获取一个embebbed资源的路径和Microsoft的文档,但它让我很困惑。

我的第一个问题:什么是资源:它是.resources文件还是其中的文件,如图标。

第二:当我使用GetManifestResourceNames方法时:我是否获得了.resources文件名或其中文件的名称。 当我在我的程序中使用它时,我只获取.resources文件,但是阅读像这样循环遍历所有资源的resx文件的主题,我得到的印象我应该得到的名称.resources文件中的文件。

是我,还是这个术语真的有点令人困惑? 任何人都可以让它更清晰一点吗? 谢谢你的帮助。

资源是您通过将其标记为“EmbeddedResource”而编译的任何文件,这只是将文件合并到程序集中。 GetManifestResourceNames()只是一个枚举器,它为我们提供了所有嵌入式编译资源文件的名称,例如MyAssembly.resources 。 需要通过加载此资源文件的ResourceSet枚举实际资源元素。

我不知道你是否还需要这个问题的答案,但根据我的经验, GetManifestResourceNames()返回程序集中嵌入的.resource文件的名称。

如果您想访问各个资源,您可以这样做:

 Assembly assembly = Assembly.LoadFrom(assemblyName); string[] names = assembly.GetManifestResourceNames(); ResourceSet set = new ResourceSet(assembly.GetManifestResourceStream(names[0])); foreach (DictionaryEntry resource in set) { Console.WriteLine("\n[{0}] \t{1}", resource.Key, resource.Value); } 

由于Felice Pollano的回答,我得到了我的项目。 我在我的解决方案中添加了一个名为Images的文件夹,并在Windows资源管理器中打开该文件夹,然后将我的图像文件复制到Images文件夹中。 然后进入visual studio并单击Solution Explorer顶部的“show all files”,右键单击Images文件夹中的图像文件,然后单击Include in project。 然后我左键单击解决方案资源管理器中的图像文件,然后在“属性”窗口中,将构建操作设置为嵌入式资源,就像您提到的那样。

这是我访问此图片的代码

 private Dictionary GetImages() { List picsStrm = new List(); Assembly asmb = Assembly.GetExecutingAssembly(); string[] picNames = asmb.GetManifestResourceNames(); foreach (string s in picNames) { if (s.EndsWith(".png")) { Stream strm = asmb.GetManifestResourceStream(s); if (strm != null) { picsStrm.Add(strm); } } } Dictionary images = new Dictionary(); int i = 0; foreach (Stream strm in picsStrm) { PngBitmapDecoder decoder = new PngBitmapDecoder(strm, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default); BitmapSource bitmap = decoder.Frames[0] as BitmapSource; Image img = new Image(); img.Source = bitmap; img.Stretch = Stretch.UniformToFill; images.Add(i, img); i++; strm.Close(); } return images; } 

这实际上来自Islam ElDemery撰写的 这篇文章(A WCF-WPF聊天应用程序)