起因
作为一个从Cpper转到C#并且直接从事WPF开发的萌新来说,正式编码过程中碰到了不少问题,一路上磕磕碰碰的。因为软件设计需求上的要求,需要将一些配置文件(XML、INI等)内嵌到程序中,等需要时进行读取。找了不少资料,加上自己的连蒙带猜,终于搞定了。在此,乘着还热乎着赶紧记录下。本人用的是Visual Studio 2015 英文版,其实都差不多的。
实现步骤
执行程序中加入内嵌文件步骤
- 在执行程序中找到 Resources.resx 并双击,会进入项目属性的 Resources 选项卡中
- 在顶部的菜单项中,选择 Add Resource 下拉菜单,根据自己的实际情况新建文件进行编辑或者是加入已经存在的文件。
- 在工程中找到刚才新增的文件,选择 Properties ,找到 Build Action 属性,将类型改为 Embedded Resource,然后保存。
至此文件已经加入到了运行程序内部了。为了方便起见,我这里假设我在 Config 目录下添加了一个 Menus.xml 配置文件。
编码读取资源
System.Reflection.Assembly Asmb = System.Reflection.Assembly.GetExecutingAssembly();
string strName = Asmb.GetName().Name + ".Config.Menus.xml";
System.IO.Stream ManifestStream = Asmb.GetManifestResourceStream(strName);
byte[] StreamData = new byte[ManifestStream.Length];
ManifestStream.Read(StreamData, 0, (int)ManifestStream.Length);
这样,内嵌资源中的数据就被读取到了StreamData中,后续可以按照自己的需求进行处理了。
在类库动态库中读取内嵌文件步骤
类库默认是不包含 Resources.resx 文件的,只需要在该类库中添加一个 Resources.resx 文件,后续就可以跟执行程序一样的处理了。
总结
目前还没有用到纯粹资源动态库的方式,等以后用到了再来补充下这种用法的步骤。