|
<p >在.Net结构中,程序集Assembly(也称着程序集或托管Dll)是自我描述的安装单元,它可以只包括一个PE(可移植可执行)格式的Dll或exe文件,也可以由多个文件组成,例如资源(位图、JPEG文件、字符串表等)、Dll和exe等。<p >其中,资源是一个范围广泛的概念,可以由多种元素组成,包括与用户交互的界面元素(如位图、图标或光标)、应用程序所需数据的自定义文件以及安装 API 使用的版本文件、菜单和对话框等都可以作为资源。<p >资源是可以重用的,在必要的时候也能对资源进行编辑修改,当我们这样做时,最好能将这些资源文件独立出来,以类似.Net模块的方式来构建程序集资源,使资源文件独立于源代码。这样,不但可以在不同的程序集中自由引用这些资源,还可以使非专业编程人员很容易地修改资源(当然,通过程序员,或者简单的批处理文件就可以把他们重新编译为新的资源文件),这种独立地对资源文件进行的修改不会引发对引用它的程序集的影响。同时,使用资源文件还有助于把应用程序本地化为不同的语言。辅助程序集正是因为只包含资源而不包含程序代码才广泛用于应用程序的本地化编程。<p >.Net结构对资源文件提供了大量支持。使用Visual Studio.Net集成开发环境IDE很容易创建资源文件,把资源添加到工程中的方法和添加窗体、类库一样简单,唯一不同的是你需要设置资源的“BuildAction”属性为“Embedded Resource”,此后,就可以使用这些资源。<p ><center><font color="#000099"><strong>创建资源</strong></font></center><p >从上面可以知道,字符串表是极常见的一种资源。要创建这类资源文件,有以下两种方式:<p >1)、使用.Net命令行工具ResGen创建。首先创建包含资源内容的文本文件,这可以使用一般的文本编辑软件如记事本、EditPlus等。该文本文件由所需要的“键值对”组成,键的名称可以在程序中引用,设置键名后把字符串值赋予该键即可完成文件的创建。作为示例,以下语句段产生这样的资源,按下面的格式保存为userinfo.txt文件:<p ><ccid_nobr><table width="550" border="1" cellspacing="0" cellpadding="2" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code"><pre><ccid_code>Username="Songh";Sex="Boy";Birthday="1973-01-15";Salary="5000RMB";</ccid_code></pre></td></tr></table></ccid_nobr><p >然后,把文本文件转换为资源文件,这仍然通过ResGen工具来实现。执行以下语句:ResGen userinfo.txt,就将生成资源文件userinfo.resources。另外,ResGen还可以创建基于XML格式的.resX资源文件,执行以下命令ResGen userinfo.resources userinfo.resx 就将生成Xml格式的资源userinfo.resx。不过,ResGen工具不支持图象资源的操作,下面的方法就不具有这样的限制。<p >2)、使用ResourceWriter类<p >为易于创建资源文件,.Net结构提供了ResourceWriter类以支持图象等各种资源类型的创建。ResourceWriter类包含的方法能以系统默认的格式将资源写入输出文件或输出流。与方法1)不同的是,这里统一在一个过程中完成。<p >要创建一个资源文件,请调用ResourceWriter类的构造函数初始化类实例并至少提供流名或文件名。资源的实际内容通过调用AddResource方法来完成,AddResource方法将资源指定为名称和值对。资源的实际写入需要调用Generate方法来实现,不过,在调用Close方法关闭该ResourceWriter时将隐式调用Generate方法。<p >ResourceWriter.AddResource()方法向要写入资源的列表中添加资源。在创建ResourceWriter类实例后,该方法可以添加至多2GB的资源,下面的重载方法之一用于向资源列表中添加string资源:<p ><ccid_nobr><table width="550" border="1" cellspacing="0" cellpadding="2" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code"><pre><ccid_code>public void AddResource( string name,//键名 string value//值);</ccid_code></pre></td></tr></table></ccid_nobr><p >在这里,AddResource方法的第一个参数指定键名称,第二个参数指定值。多次调用该方法就可以完成字符串表的创建。另外,添加图象资源可以通过实例化类Image来实现(这时,请添加System.Drawing名称空间)。<p >下面的代码段生成包含字符串表和图象的资源文件userinfo.resources。<p ><ccid_nobr><table width="550" border="1" cellspacing="0" cellpadding="2" bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code"><pre><ccid_code>using System;using System.Resources;using System.Drawing;public class RS{ public static void Main() { ResourceWriter rw=new ResourceWriter("userinfo.resources");//提供文件名以初始化ResourceWriter类实例。 Image image=Image.FromFile("photo.gif");//实例化Image类 rw.AddResource(" hoto",image);//添加图象 rw.AddResource("Username","songh");//添加字符串 rw.AddResource("Sex","boy");//添加字符串 rw.AddResource("Birthday","1973-01-15");//添加字符串 rw.AddResource("Salary","5000RMB");//添加字符串 rw.Close();//关闭ResourceWriter并隐式调用Generate()方法完成资源文件写入磁盘文件。 }}</ccid_code></pre></td></tr></table></ccid_nobr><p >上面的代码首先打开图形文件photo.gif,创建一个Image对象。这样做时,这个图形文件必须存在于工程可执行文件的目录(通常是项目的\Bin\Debug目录)下,或者在Image.FromFile()的方法参数中指定图象的完整路径。然后,通过几次调用AddResouce()方法把字符串资源添加到ResourceWriter对象中。最后,调用Close()方法关闭ResourceWriter对象并隐式调用Generate()方法把资源写入文件userinfo.resources。 <p align="center"><font color="FF0000" >1</font>2<span class="content01">下一页>></span></p></p> |
|