2008年5月1日星期四

C# Resource的暴露问题

写一个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即可。 

没有评论:

发表评论