首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 操作系统
在.Net中嵌入资源文件到程序集中-.NET教程,VB.Net语言
作者:网友供稿 点击:1527
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 

一、导言... 3

二、软件环境... 3

三、资源文件... 3

四、创建资源文件... 3

五、使用资源文件... 6

5.1 在命令行编译中使用资源文件... 6

5.2 在visual studio.net中使用资源文件... 8

六、结束语... 9





一、导言

microsoft的.net从2002年1月15日第一版发布到今天,已经得到了广泛的使用;从刚推出时国内相关书籍种类寥寥,到今天.net的相关书籍的大大丰富,已有越来越多的人——初学者或者有经验的程序员,在学习、应用.net。本文面向对.net有些了解的者,以c#为例,介绍如何在.net编程环境中,把资源文件(如包含图片、字符串等的资源文件)嵌入到程序集中。这里的所说的程序集可以是exe文件,也可是供其他程序调用的dll文件。



本文不涉及国际化、本地化、打包和部署资源方面的内容,有兴趣的读者可以查阅.net framework sdk文档。



二、软件环境

运行本文中的程序需要如下软件环境:windows 2000/xp, .net framework sdk。本文中的代码在如下环境中运行通过:windows xp professional, .net framework v1.1 , visual studio.net 2003。



三、资源文件

几乎每一个生产性应用程序都需要使用资源。资源是在逻辑上由应用程序部署的任何非可执行数据。资源可以在应用程序中作为错误信息显示,或者作为用户界面的一部分显示。资源可以包含多种形式的数据,包括字符串、图像和持久的对象。通过在资源文件中存储数据,无需重新编译整个应用程序即可更改数据。

在.net中,有文本文件.resx 文件和 .resources 文件三种资源文件。如果资源将只包含字符串数据,则文本文件是最简单的选择。如果资源将包含对象或字符串与对象的组合,则必须创建 .resx 文件或 .resources 文件。注意,只有 .resources 文件才应能嵌入在公共语言运行库程序集和附属程序集中。



四、创建资源文件

创建资源文件,有编写代码以及利用名为reseditor的软件这两种途径。以下分述之。



4.1 编写代码创建资源文件

.net framework 类库中提供了resourcewriter 类来创建.resources 文件。resourcewriter 类包含在system.resources命名空间中。resourcewriter 类以系统默认的格式将资源写入输出文件或输出流。

在resourcewriter 类中使用 addresource 方法将资源指定为名称和值对。资源名在用于查找时是区分大小写的,但是,为更易于支持创作工具和帮助消除错误,resourcewriter 将不允许使用仅大小写不同 .resources 文件名。

若要创建一个资源文件,请用唯一的文件名创建 resourcewriter,至少调用 addresource 一次,再调用 generate 将该资源文件写入磁盘,然后调用 close 关闭该文件。

下面的示例将若干个字符串写入到 myresources.resources 文件中。

//例1

//本示例代码来自 .net framework sdk文档

//createrestest_1_1.cs

using system;

using system.resources;



public class writeresources {

public static void main(string[] args) {

// creates a resource writer.

iresourcewriter writer = new resourcewriter("myresources.resources");



// adds resources to the resource writer.

writer.addresource("string 1", "first string");

writer.addresource("string 2", "second string");

writer.addresource("string 3", "third string");

// writes the resources to the file or stream, and closes it.

writer.close();

}

}

编译代码:csc createrestest_1_1.cs , 编译成功后,则在工作目录里生成名为createrestest_1_1.exe的可执行文件;运行该文件,在工作目录中生成名为string.resources的资源文件。



以上给出了字符串写入资源文件的例子,下面的示例尝试将若干张图片嵌入到资源文件myresources.resources中。

//例2

//createrestest_1_2.cs

using system;

using system.drawing;

using system.resources;



public class creatpicresource

{

public static void main ()

{

// creates a resource writer.

resourcewriter rw = new resourcewriter ( "picture.resources" );



//从指定的文件创建image对象.

//_bird.png、 _butterfly.png文件在当前工作目录

image _bird_pic = image.fromfile ( "_bird.png" );

image _butterfly_pic = image.fromfile ("_butterfly.png" );



//把image对象添加到资源文件中

//resourcewritername.addresource(string name, object value);

//其中name为资源名,value为资源值

rw.addresource ( "bird" , _bird_pic );

rw.addresource ( "butterfly" , _butterfly_pic );



// writes the resources to the file or stream, and closes it.

rw.generate ();

rw.close ();

}

}



确保_bird.png和_butterfly.png文件在当前工作目录。编译代码:csc createrestest_1_2.cs , 如编译成功,生成createrestest_1_2.exe;运行该文件,则生成资源文件picture.resources。





4.2 利用资源编辑器 (reseditor)创建资源文件

.net framework 中包含一个称为 reseditor 的示例应用程序,它可帮助您创建和编辑资源文件。reseditor可以创建二进制资源文件 (.resources) 以及 xml 资源文件 (.resx)。



生成 reseditor

reseditor 以源代码的形式随 .net framework sdk 一起提供。必须先使用提供的批处理文件生成 reseditor,然后才能使用它。找到 \sdk\v1.1\samples\tutorials\resourcesandlocalization\reseditor文件夹,运行批处理文件build.bat,编译成功后,生成reseditor.exe应用程序。在笔者所用的环境中,路径如下:

\program files\microsoft visual studio .net 2003\sdk\v1.1\samples\tutorials\resourcesandlocalization\reseditor 。



生成 reseditor 后,您可以使用它创建、编辑资源文件。



使用 reseditor 创建资源文件



启动reseditor应用程序。

从“添加”下拉菜单中选择要添加的资源类型。

在“添加”文本框中键入资源的名称,然后单击“添加”按钮,将资源项添加到文件中。

在主窗格中,单击资源名称旁边的单元格以指定一个值。

对于“字符串”资源,在该框中键入相应的字符串。

对于“图像”和其他类型的资源,请浏览到相应的文件。

对于要添加到文件中的每个资源,重复步骤 3、4、5。

在“文件”菜单中,单击“另存为”以保存文件。您可以将文件保存为 .resources 文件,也可以保存为 .resx 文件。



编辑现有资源文件

可以使用 reseditor 编辑现有资源文件(.resources 文件和 .resx 文件)。使用方法如下:



启动reseditor应用程序。

在“文件”菜单上单击“打开”。

在“打开资源文件”对话框中浏览到相应的资源文件。

资源文件打开,并且它包含的资源显示在主窗格中。



如果要更改任何资源的值,请单击资源名称旁边的单元格并指定正确的值。

对于“字符串”资源,在该框中键入相应的字符串。

对于“图像”和其他类型的资源,请浏览到相应的文件。

如果要重命名资源,请执行以下操作:

通过单击要重命名的资源,突出显示它。

在“重命名”文本框中键入新名称。

单击“重命名”按钮,应用新名称。

如果要删除资源,请通过单击该资源将其突出显示,然后从“资源”菜单中选择“删除”。

编辑完资源文件后,选择“文件”,然后选择“另存为”以保存文件。





五、使用资源文件

创建了资源文件后,很容易将它们添加到您的应用程序中。二进制资源文件 (.resources) 或 xml 资源文件 (.resx) 可直接添加到您的项目中。当编译项目时,同时也会编译资源文件。您可以通过使用 resourcemanager 类检索嵌入的资源(即已经编译到程序集中的资源)。

如果您希望经常更新程序中的资源而无需重新编译整个解决方案,可创建一个资源程序集。



5.1 在命令行编译中使用资源文件

这里使用例2代码生成的资源文件picture.resources作为示例。示例代码createrestest_2_1.cs如下:



//例3

//createrestest_2_1.cs

using system;

using system.drawing;

using system.windows.forms;

using system.resources;

using system.reflection;



public class testresform : system.windows.forms.form

{

private picturebox picbox1;

private picturebox picbox2;



public testresform()

{

picbox1 = new picturebox();

picbox1.location = new point(0,0);

picbox1.width = rescontainer.instance.butterflyimage.width;

picbox1.height = rescontainer.instance.butterflyimage.height;

picbox1.image = rescontainer.instance.butterflyimage;



picbox2 = new picturebox();

picbox2.location = new point(0,100);

picbox2.width = rescontainer.instance.birdimage.width;

picbox2.height = rescontainer.instance.birdimage.height;

picbox2.image = rescontainer.instance.birdimage;



controls.add(picbox1);

controls.add(picbox2);

this.size = new size(200,200);

}



public static void main()

{

application.run(new testresform());

}

}



public class rescontainer

{

// data members

private image _birdimage = null;

private image _butterflyimage = null;

private static rescontainer _instance = new rescontainer();



// constructor

private rescontainer()

{

try

{

resourcemanager rm = new resourcemanager( "picture",

assembly.getexecutingassembly() ) ;

_butterflyimage = (image)( rm.getobject ( "butterfly" ) );

_birdimage = (image)( rm.getobject ( "bird" ) );

}

catch(exception ex)

{

ex.tostring();

}

}



// properties

public static rescontainer instance

{

get{

return _instance;

}

}



public image butterflyimage

{

get{

return _butterflyimage;

}

}



public image birdimage

{

get{

return _birdimage;

}

}

}

在控制台下,切换工作目录到当前代码、资源文件所在目录,运行csharp编译器csc(具体使用请参见.net framework sdk)。确保资源文件存在且正确,输入:csc /t:winexe /resource:picture.resources userestest_2_1.cs,编译成功后得到userestest_2_1.cs.exe。



5.2 在visual studio.net中使用资源文件

向您的项目添加资源文件:从“项目”菜单中,选择“添加现有项”。“添加现有项”对话框打开。浏览到要添加到项目中的资源文件。它可能是 .resources 文件,也可能是 .resx 文件。选择适当的文件。

在“生成”菜单中,选择“生成解决方案”将资源文件嵌入到您的已编译项目中。注意,如果对已添加到项目中的资源文件作出更改,需要在“生成”菜单中,选择“重新生成解决方案”,使更改生效。

至于代码,和userestest_2_1.cs略有不同。假设所在项目的命名空间为project1,则需要把rescontainer构造方法中的:

resourcemanager rm

= new resourcemanager( "picture", assembly.getexecutingassembly() ) ;

改为:

resourcemanager rm = new resourcemanager(" project1.picture",

assembly.getexecutingassembly() ) ;

如果不加上命名空间,则生成解决方案时并不会出现任何错误提示,而在编译、执行会出现错误。奇怪的时执行完resourcemanager rm

= new resourcemanager( "picture", assembly.getexecutingassembly() ) ; 这一行时rm并不为null,也不抛出异常,就这样悄悄的进行下去了。执行到下一句:

_butterflyimage = (image)( rm.getobject ( "butterfly" ) );

异常抛出,异常信息如下:“system.resources.missingmanifestresourceexception: could not find any resources appropriate for the specified culture (or the neutral culture) in the given assembly. make sure \"picture.resources\" was correctly embedded or linked into assembly \"project1\"”。



究其原因,应该是ide捣的鬼,把后添加如的资源文件也纳入其命名空间中。试把项目的默认命名空间删除(右键单击项目,属性,常规),则资源文件前就不需要加上命名空间了。





六、结束语

资源文件的创建和使用就介绍到这里,其中文本格式和.resx格式的资源文件没有涉及。资源文件的一大用途——国际化,也不在本文范围内。在有些程序的编写中,把资源文件嵌入程序集中,至少可以避免程序集文件,对以文件形式存在的资源的依赖——如果form.exe程序需要的图片文件背删除了或不在正确的路径下,怎么办? 当然,在visual studio.net的视图设计器中,可以添加图片等资源,但学会自己动手完成对资源的创建,管理和使用,也不至于被visual studio.net这样优秀的ide惯坏了(其实很难不被惯坏)。



文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·在.Net中嵌入资源文件到程序集中-.NET教程,VB.Net语言
·字符串转换成十六进制-.NET教程,算法/线程
·获得网卡MAC地址和IP地址(VB.net)-.NET教程,VB.Net语言
·.Net框架程序设计(一)----进阶-.NET教程,.NET Framework
·我是否可以将Excel数据导入?-ASP教程,数据库相关
·封面的最佳设计-.NET教程,评论及其它
·使用C#控制远程计算机的服务-.NET教程,C#语言
·利用XMLHTTP下载文件-ASP教程,XML相关
·关于VB.net中无法使用VB6控件-.NET教程,VB.Net语言
·.NET里面的Interop太烂了-.NET教程,.NET Framework
最新文章
·windowsxp sp3 概览里面到底有什么?_windows xp
·让vista系统停止讨厌的报告程序问题_windows vista
·如果你有100万流量如何赚钱_网赚技巧
·携程海归派ceo梁建章:天才整合旅游业_站长访谈
·狂热+坚持=成功 博客园ceo dudu访谈_站长访谈
·php5对mysql5的任意数据库表的管理代码示例(三) _php技巧
·php5对mysql5的任意数据库表的管理代码示例(一)_php技巧
·好的产品才是最好的推广_站长心得
·视频网站的媒体传播现状走向_站长心得
·点评一下目前国内各站长类网站发展现状_站长心得
相关主题
  • 在.net中创建使用全球唯一标识符_asp.net技巧
  • 在.net app中集成com组件的一些简单技巧_asp.net技巧
  • 在.net 里用xpath的case-insensitive 的查询_asp.net技巧
  • 在.net 2.0 中发送email_asp.net技巧
  • 在.net中使用gdi+来提高gif图片的保存画质 _asp.net技巧
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭