浅谈Visual Basic.Net中资源文件的使用Discuss on the Use of Resources File in Visual Basic.Net
林海菁刘珍
Lin HaiJingLiu Zhen
(江西工业贸易职业技术学院, 江西 南昌330100)
(Jiangxi Industry Commerce Vocational Technological College, Jiangxi Nanchang330100)
摘要: 资源文件是一种有效的组织、管理和使用资源的文件形式,在软件开发中有着广泛的应用。在循序渐进地介绍在VB.NET中使用资源文件三种方法的基础上,让大家可以借助.NET帮助文档,更深入了解文件的其它用法。
关键词: 资源文件; VB.NET; 嵌入资源; 资源程序集
中图分类号:TP311.11文献标识码:A文章编号:1671-4792-(2007)6-0137-03
在应用程序开发过程中,通常会用到文字、图片、图标等各种资源。很多人采用的解决方案是,建立文件夹存放这些文件,然后在程序中指定路径进行引用。这种方法虽然简单,但也有相当大的缺陷。首先,书写代码时必须指明调用路径,既繁琐又增加了出错的可能; 其次,程序安装时必须携带此文件夹,并在指定位置安装,一旦移动、删除或重命名则调用出错,然而并没有保护措施来防止用户对该文件夹进行更改,因此极易导致程序执行错误;第三,可能有恶意用户篡改信息,以同名文件替换原始资源,使程序出现不期望的结果。
使用资源文件可以避免上述问题,还可以增强程序的灵活性,在不同时间或地点使用不同的资源文件从而改变软件的外观或执行效果。另外,资源文件是独立于源程序的,所以它又可以被多个程序共享使用。.NET Framework对资源文件的创建和使用提供了全面的支持,不过翻阅了很多书籍后,笔者发现都介绍得比较简单,基本上只提及它在本地化应用程序中的使用; 网上有些资料虽然讲到了一些细节,但行文较随意,不适于初学者理解和灵活应用。因此,笔者希望通过这篇文章让大家快速掌握资源文件的使用,减少程序开发中的工作量,增强应用程序的健壮性。
本文由浅入深,从三个应用层次介绍资源文件的使用。由于笔者一直使用VB.NET,故以该语言为例进行描述。
1将文件作为嵌入资源
最简单的方法,是将图片等文件作为“嵌入的资源”直
接添加到项目当中。生成解决方案时,这些文件会被嵌入程
序集,因而调用时既不会不到,也不需考虑路径问题。具
体方法如下:
第1步,通过“添加现有项”的方法,将文件添加到项
目中; 单击“项目”菜单中“添加现有项”命令,打开“添
加现有项”对话框;设置对话框中“文件类型”为“所有文
件”,以显示计算机中的所有文件类型;选取要添加到项目
中的文件,单击“确定”后,所选文件便添加到项目中,在
“解决方案资源管理器”中可以查看,同时该文件被复制到
项目所在文件夹。
第2步,在“解决方案资源管理器”中选择添加的文件,
在属性面板中设置其“生成操作”属性为“嵌入的资源”,这
一点很重要,否则在下面的使用过程中将会出错。
第3步,按如下步骤即可在程序中使用嵌入资源。
首先,调用Assembly类的Get Manifest Resource
Stream方法将程序集清单中的资源数据加载到流中。调用格
式为: GetManifestResourceStream(“项目根命名空间.文件
名.扩展名”)。Assembly类定义在命名空间System.Reflec-
tion中。
例如: 项目名为MyPro,嵌入的图像文件名为face.jpg,
则程序代码如下所示:
Dim stm As IO.Stream = Assembly.Get Executing
Visual Basic.Net
使
137
科技广场2007.6138
myString = rm.GetString("s1")
Dim myImage As System.Drawing.Image
myImage = rm.GetObject("b1")
第4步,生成解决方案。
使用资源文件,较好地解决了上一方法不足,所有资源井然有序地组织在一个文件中,易于管理,因而也是一种比较常用的方法。不过,有一点必须了解的是,在这两种方法中,由于资源嵌入到程序集中,所以程序集可能比较大,尤其是包含较多大图片时。
在某些时候,软件设计者或用户可能有更多的要求,如资源文件可能常需更新,由于资源文件嵌入在程序集中,所以不得不重新生成程序集,比较麻烦,而且不能由用户来完成操作。又如某应用程序在不同
用户或地区使用时,可能需要不同的资源(如不同图片,或者不同语种的字符串),此时将不得不根据资源文件的不同而生成若干个不同的应用程序再发布给不同的用户。为此,我们可以使用第三种方法,生成只包含资源的附属程序集。
3使用资源程序集
在这种方法中,我们利用.NET Framework生成解决方案时自动将本地化资源文件生成为独立的附属程序集的功能来建立只包含资源的附属程序集,使程序与资源相对独立。应用程序的本地化,简而言之,是指通过对程序界面和资源的翻译使程序适合于不同的区域; 本地化资源文件就是存储本地化数据的资源文件。限于篇幅,本文不对本地化作详细介绍。本地化资源文件与一般资源文件的关键不同之处,在于文件名的命名规则。本地化资源文件必须按如下规则命名:资源文件根节点名.区域性代码.resX(或resources),因此,为了得到独立于程序的资源程序集,我们在使用ResEditor程序或其它方法生成资源文件时,也应按这个规则命名。假设我们的应用程序仅在中国大陆地区使用,则可使用“zh-CN”作为区域性代码,其它区域性代码可查看帮助文件。上例中的资源文件名myres.resX则应改为myres.zh-CN.resX。
按这种命名规则建立资源文件后,在程序中使用资源文件的方法与上文介绍的第二种方法完全相同(注: 资源文件根节点名仍为myres,不要把zh-CN写进去)。所不同的是,生成解决方案
后,可以看到主程序集之外有一个名为“zh-CN”的文件夹,其中存放着一个只包含资源的附属程序集。应用程序执行时,根据当前区域性自动搜索到“zh-CN”文
件夹中的资源程序集。
如果软件开发者更新了资源文件,不需重新生成和发布
应用程序,只要将新的资源程序集发布给客户,客户再用该
文件覆盖原资源程序集即可。此外,对于不同用户或区域,
分发不同的资源程序集便可满足大家使用不同资源的需求,
而不需生成不同的应用程序。
当然,我们并不能就此认为使用资源程序集就是最好的
方法。从某种意义上说,它使应用程序在得到灵活性的同时
也失去了健壮性,因为资源与程序相独立,一旦不到资源
程序集,则程序中的调用将会出错。因此,编程人员在选择
具体方法时,一定要根据软件功能和用户需求来进行权衡。
4结束语
掌握使用资源文件的一些基本方法,并根据软件和用户
的实际需求灵活运用,能较好地提高软件质量,减少软件开
发和维护工作量。限于篇幅,本文并没有详尽地叙述创建和
使用资源文件的所有方法,例如ResourceReader、
ResourceWriter、ResXResourceReader和
ResXResourceWriter 类的使用就没有涉及,并且也没有深
入地探讨资源文件在本地化中的应用。但也相信正因如此,
本文才能以比较浅显易懂地方式让一个不了解资源文件的编
程者迅速地掌握资源文件的使用。在这个基础上,读者可以
借助.NET帮助文档,更深入了解资源文件的其他用法。
参考文献电脑软件editor
[1]微软公司.基于VB.NET的Windows应用程序设计[M].
北京:高等教育出版社,2004.
[2]刘晓华.精通.NET核心技术——原理与构架[M].北
京:电子工业出版社,2002.
[3]罗斌.Visual Basic .NET精彩编程实例集锦[M].
北京:中国水利水电出版社,2005.
作者简介
林海菁(1975—),女,江西南昌人,讲师,计算机应
用专业硕士;
刘珍(1972—),女,江西南昌人,讲师,计算机应用
专业硕士。
Visual Basic.Net
使
139