DotNet读取嵌入的资源文件
在Dotnet中应用中,通常会有一些外部的数据文件或者图片文件等,这些文件在我们的主应用程序中需要使用到,因此发布的时候一般需要把这些文件和应用程序可执行文件一起拷贝发布。
但 有些时候,一些这种数据文件或者配置文件或者图片文件的内容基本不会在运行时刻改变,或者我们不希望用户看到文件的内容,这时候可考虑把这类文件作为应用 程序的嵌入式资源文件来,即在Dotnet工程中,加入这些文件,并在文件属性中设定文件的“生成方式”为“嵌入的资源”,这样,DotNet在编译的时 候就会把这些文件编译到Exe或者DLL文件中。
如何读取嵌入的资源文件呢:
通过 Assembly (程序集)的反射功能,如下代码
string assembleName = this.GetType().Assembly.GetName().Name;
System.IO.Stream xmlStream =
this.GetType().Assembly.GetManifestResourceStream(assembleName + ".AppDesc.xml");
System.Xml.Serialization.XmlSerializer s =
new System.Xml.Serialization.XmlSerializer(typeof(AppDesc));
System.IO.Stream xmlStream =
this.GetType().Assembly.GetManifestResourceStream(assembleName + ".AppDesc.xml");
System.Xml.Serialization.XmlSerializer s =
new System.Xml.Serialization.XmlSerializer(typeof(AppDesc));
this.GetType().Assembly 取得当前类所在的程序集,通过调用它的 GetManifestResourceStream 方法就可以取出打包在程序集中的资源文件。
GetManifestResourceStream 方法需要一个字符串参数作为资源名称,资源的名称由2部分组成,前面是程序集的名称,然后一个句点,然后是文件的文件名。例如:假设程序集名称为DemoApp,那么
- 在根目录下的的文件 demo1.xml 对应的资源名称为 DemoApp.demo1.xml
- 在data子目录下下的文件demo1.xml 对应的资源名称为 DemoApp.data.demo1.xml
- 等等