C#编程:在.NET中读取嵌入和使用资源文件的方法
Vivian 2018-05-22 来源 : 阅读 1242 评论 0

摘要:C#编程中,Dotnet中嵌入资源(位图、图标或光标等)有两种方式,一是直接把资源文件加入到项目,作为嵌入资源,在代码中通过Assembly的GetManifestResourceStream方法获取资源的Stream。另一种方法是在项目中加入. resx资源文件,在资源文件中添加资源,由ResourceManager类统一管理其中的资源。希望对大家学习C#编程有所帮助。

C#编程中,Dotnet中嵌入资源(位图、图标或光标等)有两种方式,一是直接把资源文件加入到项目,作为嵌入资源,在代码中通过Assembly的GetManifestResourceStream方法获取资源的Stream。另一种方法是在项目中加入. resx资源文件,在资源文件中添加资源,由ResourceManager类统一管理其中的资源。希望对大家学习C#编程有所帮助。

下面分别详述这两种方法

一、使用GetManifestResourceStream读取嵌入资源

1、加入资源文件

直接把要嵌入到程序集的资源文件加入到项目中,可以加在项目的根目录,可以加在项目的任何目录中。

2、设置资源文件的“BuildAction”属性

将嵌入资源文件的“BuildAction”属性设置为“Embedded Resource”

3、代码中使用嵌入资源


//获得正在运行类所在的名称空间
 
Type type = MethodBase.GetCurrentMethod().DeclaringType;
 
string _namespace = type.Namespace;
 
//获得当前运行的Assembly
 
Assembly _assembly = Assembly.GetExecutingAssembly();
 
//根据名称空间和文件名生成资源名称
 
string resourceName = _namespace + ".directory.BitmapManifest.bmp";
 
//根据资源名称从Assembly中获取此资源的Stream
 
Stream stream = _assembly.GetManifestResourceStream(resourceName);
 
Image myImage = Image.FromStream(stream);

   

注意资源名称的组成规则:

项目默认名称空间.资源在项目中所在目录.资源文件名

上面代码中BitmapManifest.bmp位图就在项目的directory目录下。如果资源文件直接在项目根目录,则为项目默认名称空间.资源文件名

再给一个xml资源的例子:


//获得正在运行类所在的名称空间
 
Type type = MethodBase.GetCurrentMethod().DeclaringType;
 
string _namespace = type.Namespace;
 
//获得当前运行的Assembly
 
Assembly _assembly = Assembly.GetExecutingAssembly();
 
//根据名称空间和文件名生成资源名称
 
string resourceName = _namespace + ".XMLFileTest.xml";
 
//根据资源名称从Assembly中获取此资源的Stream
 
Stream stream = _assembly.GetManifestResourceStream(resourceName);
 
  
 
XmlDocument xmlDoc = null;
 
xmlDoc = new XmlDocument();
 
xmlDoc.Load(stream);

   

二、使用. resx资源文件嵌入资源

1、新建资源文件

在项目中新建一个资源文件,资源文件以.resx为后缀,同时还会新建一个跟资源文件同名的Designer.cs文件。

其实资源文件最大的用处是用来做多语言版本的软件时保存不同语言的资源,比如不同语言的菜单文本,可以把不同语言的字符串放在同一个资源类型下的不同资源包中,程序运行时根据运行时系统的culture选择不同的包显示不同语言的字符串。

新建了资源文件后就能往资源文件中添加资源文件:

C#编程:在.NET中读取嵌入和使用资源文件的方法

图1 .resx资源文件可嵌入的资源类型

资源中可以添加字符串、位图、图标、音频、文件等等的资源。

添加的资源都会被保存在项目的Resources文件夹中。

2、设置资源文件的“BuildAction”属性

Resources文件夹中的所有资源文件的“BuildAction”属性设置为“Embedded Resource”。

3、 资源存在方式

.resx资源文件管理的资源可以用两种存在形式,一种是以一般的文件形式存在于Resources文件夹中,另一个是经过Base64编码后嵌入到.resx资源文件中。

C#编程:在.NET中读取嵌入和使用资源文件的方法

图2 .resx资源文件中资源存在方式 

打开.resx资源文件,选择资源,在属性中Persistence属性决定资源的存在形式。资源的两种存在形式,在代码中调用都是一样的。

4、 代码中使用嵌入资源

   

//获得正在运行类所在的名称空间
 
Type type = MethodBase.GetCurrentMethod().DeclaringType;
 
string _namespace = type.Namespace;
 
//获取当前主程序集
 
Assembly currentAssembly = Assembly.GetExecutingAssembly();
 
//资源的根名称
 
string resourceRootName = _namespace + ".ResourceTest";
 
//实例化资源管理类
 
ResourceManager resourceManager = new ResourceManager(resourceRootName, currentAssembly);
 
//根据资源名获得资源对象
 
Icon myIcon = (Icon)resourceManager.GetObject("IconTest");

   

注意资源的根名称的规则:

资源的根名称就是这个资源文件类的全名称。

打开.resx资源文件相应的Designer.cs文件能看到资源类的全名称:名称空间.资源类名。

资源名就是某个资源在.resx资源文件中的名称。

打开.resx资源文件可以看到各个资源的名称。上面图中图标文件IconTest.ico的名称是IconTest。

若要检索“字符串”资源,请调用 GetString 方法。

若要检索其他类型的资源,请调用 GetObject 方法,并将得到的资源显式转换成对应的类型。

5、多语言的资源应用

 

//得到当前语言环境
CultureInfo ci = Thread.CurrentThread.CurrentCulture;
//CultureInfo ci = System.Globalization.CultureInfo.CurrentCulture;
 
Icon myIcon = (Icon)resourceManager.GetObject("IconText", ci);

本文由职坐标整理并发布,了解更多内容,请关注职坐标编程语言C#.NET频道!

本文由 @Vivian 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程