写一个C#的程序,可能会用到一些资源和配置文件,在C#中有两种方式来暴露我们的资源,一个是Embedded Resource,一个是直接放到运行的目录下(通过Copy to local) 。对于不希望发布后能够被用户修改的资源,应该使用Embedded Resource,而那些希望用户修改的配置就直接Copy to local放到编译好的目录中就好了。对于Embedded Resource,还有一个好处是用户只需要拿到Assembly就可以了。Resource是和Assembly绑定在一起的。不会搞的一大堆的文件。那么,应该如何使用Assembly中的Embedded Resource呢?引用别人的一个列子吧。也算是给自己的一个笔记
/假设/WordProcessingML是项目的名称空间
string str = "WordProcessingML.emptyDoc.xml";
//可以使用System.Reflection.Assembly.GetExecutingAssembly().GetName().Name获得默认名称空间
//也可以写成这样,比较灵活string str = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name + ".emptyDoc.xml";
System.IO.Stream stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(str);
string strXml = string.Empty;
System.IO.StreamReader sr = new System.IO.StreamReader(stream);
{
strXml = sr.ReadToEnd();
}
m_xmlDocument.LoadXml(strXml);
重点就是拿到这个resource的 Stream
此外就是Embedded Resource在加载时候的命名问题,首先是项目的默认的命名空间的名字,然后是Dot'.',然后如果是项目文件夹外的资源或者是项目文件夹下的直接资源(没有子文件夹),那么名称就是DefaultNameSpace.ResourceName,如果有子文件夹,那么就是DefaultNameSpace.ChildFolder1.ChildFolder2.ResourceName即可。
没有评论:
发表评论