在.NET中读取嵌入和使用资源文件的方法
来源:互联网 发布:零基础学java pdf下载 编辑:程序博客网 时间:2024/06/03 04:55
Dotnet中嵌入资源(位图、图标或光标等)有两种方式,一是直接把资源文件加入到项目,作为嵌入资源,在代码中通过Assembly的GetManifestResourceStream方法获取资源的Stream。另一种方法是在项目中加入. resx资源文件,在资源文件中添加资源,由ResourceManager类统一管理其中的资源。
下面分别详述这两种方法
一、使用GetManifestResourceStream读取嵌入资源
1、加入资源文件
直接把要嵌入到程序集的资源文件加入到项目中,可以加在项目的根目录,可以加在项目的任何目录中。
2、设置资源文件的“BuildAction”属性
将嵌入资源文件的“BuildAction”属性设置为“Embedded Resource”
3、代码中使用嵌入资源
//获得正在运行类所在的名称空间Type type = MethodBase.GetCurrentMethod().DeclaringType;string _namespace = type.Namespace;//获得当前运行的AssemblyAssembly _assembly = Assembly.GetExecutingAssembly();//根据名称空间和文件名生成资源名称string resourceName = _namespace + ".directory.BitmapManifest.bmp";//根据资源名称从Assembly中获取此资源的StreamStream stream = _assembly.GetManifestResourceStream(resourceName);Image myImage = Image.FromStream(stream);
注意资源名称的组成规则:
项目默认名称空间.资源在项目中所在目录.资源文件名
上面代码中BitmapManifest.bmp位图就在项目的directory目录下。如果资源文件直接在项目根目录,则为项目默认名称空间.资源文件名
再给一个xml资源的例子:
//获得正在运行类所在的名称空间Type type = MethodBase.GetCurrentMethod().DeclaringType;string _namespace = type.Namespace;//获得当前运行的AssemblyAssembly _assembly = Assembly.GetExecutingAssembly();//根据名称空间和文件名生成资源名称string resourceName = _namespace + ".XMLFileTest.xml";//根据资源名称从Assembly中获取此资源的StreamStream stream = _assembly.GetManifestResourceStream(resourceName); XmlDocument xmlDoc = null;xmlDoc = new XmlDocument();xmlDoc.Load(stream);
二、使用. resx资源文件嵌入资源
1、新建资源文件
在项目中新建一个资源文件,资源文件以.resx为后缀,同时还会新建一个跟资源文件同名的Designer.cs文件。
其实资源文件最大的用处是用来做多语言版本的软件时保存不同语言的资源,比如不同语言的菜单文本,可以把不同语言的字符串放在同一个资源类型下的不同资源包中,程序运行时根据运行时系统的culture选择不同的包显示不同语言的字符串。
新建了资源文件后就能往资源文件中添加资源文件:
图1 .resx资源文件可嵌入的资源类型
资源中可以添加字符串、位图、图标、音频、文件等等的资源。
添加的资源都会被保存在项目的Resources文件夹中。
2、设置资源文件的“BuildAction”属性
Resources文件夹中的所有资源文件的“BuildAction”属性设置为“Embedded Resource”。
3、 资源存在方式
.resx资源文件管理的资源可以用两种存在形式,一种是以一般的文件形式存在于Resources文件夹中,另一个是经过Base64编码后嵌入到.resx资源文件中。
图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);
- 在.NET中读取嵌入和使用资源文件的方法
- 在.NET中读取嵌入和使用资源文件的方法
- 在.NET中嵌入和使用资源文件
- [转贴] 在.NET中嵌入和使用资源文件
- 在.NET中嵌入和使用资源文件
- 在.net中使用嵌入的资源
- .NET中使用嵌入的资源
- 在.Net中嵌入资源文件到程序集中
- 在.Net中嵌入资源文件到程序集中
- 在.Net中嵌入资源文件到程序集中
- 在.Net中嵌入资源文件到程序集中-.NET教程,VB.Net语言
- 如何在.Net 中使用资源文件?
- 在javascript中使用(读取、设置)Asp.net服务器的属性、方法和事件
- winfrom中,嵌入的资源文件路径,并读取txt文件
- .Net中对资源文件的获取(获取嵌入到程序中的图片资源)
- 把项目中的xml文件的生成操作改为“嵌入的资源”,我在这个项目中怎么读取xml文件里的内容?
- winform 嵌入资源读取使用
- BCB中嵌入资源文件的研究
- ES2017 标准引入了 async 函数
- 详细图解MySQL5.7(win7x64 5.7.16版本)下载、安装、配置与使用
- Android build tips
- CentOS 7 命令lsb_release: command not found解决方案
- BZOJ 4236 JOIOJI 排序+线扫
- 在.NET中读取嵌入和使用资源文件的方法
- Python库的安装方法
- SSL/TLS协议运行机制的概述
- 字符转义之PHP与JS
- 【备忘】2017最新python教程老男孩Python14期视频教程下载
- ES6中的作用域
- 55. Yii import class 与 对象创建
- 3.1 用Android Studio编写第一个应用程序Hello World
- 第九章 扩展你的商店