C#资源管理

                         C#资源管理(2004.10) 


    资源是在逻辑上由应用程序部署的任何非可执行数据。资源可以在应用程序中作为错误信息显示,或者作为用户界面的一部分显示。资源可以包含多种形式的数据,包括字符串、图像和持久的对象。通过在资源文件中存储您的数据,您无需重新编译整个应用程序即可更改数据。请注意,为了将持久对象写入资源文件,这些对象必须是可序列化的。
   资源的最主要用途:对区域性和多语言的支持。
   使用程序集链接器 (Al.exe) 可以将 .resources 文件编译成附属程序集。附属程序集只能包含资源,不包含任何可执行代码。

    在.Net中使用资源常见的有以下两种方式:将资源文件作为单独的文件链接到程序集中,和将资源嵌入PE文件中。

1.将资源文件作为单独的文件链接到程序集中:
 (1)首先在解决方案资源管理器中添加所要嵌入的Rude资源(如某个位图等)。
 (2)修改目标资源的"生成操作"属性为"嵌入的资源"。
 (3)在程序中如下使用资源:
    如有4个BMP图片资源,则以如下方式将其放入一个imagelist中
    System.Reflection.Assembly thisExe;
    this.thisExe = System.Reflection.Assembly.GetExecutingAssembly();
   
    System.IO.Stream file1 = thisExe.GetManifestResourceStream("DBCodeFactory.Recourse.OPEN.BMP");
   System.IO.Stream file2 = thisExe.GetManifestResourceStream("DBCodeFactory.Recourse.NEW.BMP");
   System.IO.Stream file3 = thisExe.GetManifestResourceStream("DBCodeFactory.Recourse.SAVE.BMP");
   System.IO.Stream file4 = thisExe.GetManifestResourceStream("DBCodeFactory.Recourse.DB.BMP");
   this.imageList1.Images.Add(Image.FromStream(file1));
   this.imageList1.Images.Add(Image.FromStream(file2));
   this.imageList1.Images.Add(Image.FromStream(file3));
   this.imageList1.Images.Add(Image.FromStream(file4));
  

注意路径:"DBCodeFactory.Recourse.OPEN.BMP" , DBCodeFactory为当前项目输出的命名空间,Recourse为解决方案资源管理器中的文件夹,4个位图都在该目录下, OPEN.BMP为目标资源名称。

2.将资源嵌入PE文件中--使用System.Resources命名空间创建和使用资源文件
 一个资源文件可以包含众多的资源,这些资源可分为三种类型:字符串,字节数组,任意对象。
      //创建资源
      ResourceWriter rw = new ResourceWriter ( "My.resources" ) ;
      Image image1 = Image.FromFile ("abc1.jpg") ;      
      rw.AddResource ( "abc1" , image1 ) ;            //object , "abc1"是唯一标志符
      rw.AddResource( "abc4","这是从资源文件中读出的字符"); //string           
      rw.Generate ( ) ;//产生资源文件 My.resources
      rw.Close ( ) ;
     
      在需要使用资源的项目中包含My.resources文件,并将My.resources文件的"生成操作"属性修改为为"嵌入的资源"。然后就可以使用嵌入的资源了。             
      //使用资源
      System.Resources.ResourceManager rm = new ResourceManager("Res.My",Assembly.GetExecutingAssembly());
      //"Res.My"中的"Res"不是创建资源的命名空间,而是包含该资源的项目(即当前项目)的命名空间。"My"则对应 "My.resources"。
      this.pictureBox1.Image = (Bitmap)rm.GetObject("abc1");
  
   注:此种资源文件的创建很类似于序列化与反序列化的过程,但又强于序列化,即资源的生成过程种用到了序列化的功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值