dotnet中使用嵌入资源

转载 2007年09月12日 23:44:00
最近打算做一个将excel文件转为xmlpipeline component,过程中需要给这个组件做个ICON,就需要处理位图和把icon作为资源嵌入到程序集中,使用时在程序集中找到icon的资源还原成icon。嵌入资源部分以前一直没做过,这回借机把嵌入资源部分的内容学习一下。
Dotnet中嵌入资源(位图、图标或光标等)有两种方式,一是直接把资源文件加入到项目,作为嵌入资源,在代码中通过AssemblyGetManifestResourceStream方法获取资源的Stream。另一种方法是在项目中加入. resx资源文件,在资源文件中添加资源,由ResourceManager类统一管理其中的资源。
下面分别详述这两种方法
一、 使用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选择不同的包显示不同语言的字符串。这里我们不关心多语言的资源的应用,所有略过这部分。
新建了资源文件后就能往资源文件中添加资源文件:
clip_image001
Figure.1 .resx资源文件可嵌入的资源类型
 
资源中可以添加字符串、位图、图标、音频、文件等等的资源。
添加的资源都会被保存在项目的Resources文件夹中。
2、设置资源文件的“BuildAction”属性
Resources文件夹中的所有资源文件的“BuildAction”属性设置为“Embedded Resource”。
3、资源存在方式
.resx资源文件管理的资源可以用两种存在形式,一种是以一般的文件形式存在于Resources文件夹中,另一个是经过Base64编码后嵌入到.resx资源文件中。
clip_image002
Figure.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。
 

dotNet读取嵌入资源的办法。

在写WinForm的时候,有些文件是不想在安装完成后以单独的文件形式暴露给用户的,比如一些重要XML格式的数据信息,这些文件可以在属性中的“生成操作”选择“嵌入式文件”,这样,就会以资源的形式封装到D...
  • pboot
  • pboot
  • 2005年11月27日 22:03
  • 1147

关于Qt 图片资源的嵌入

本人还在学习中,如果出现了什么问题,还请原谅。据我所知,一共有两种方法将图片资源嵌入第一种是绝对路径的嵌入。 这里要注意的是格式: 比如说: 在pixmap里面加入图片MainWindow::M...
  • yujunyu12
  • yujunyu12
  • 2016年01月05日 15:25
  • 308

『.NET Core CLI工具文档』(九)dotnet-run

说明:本文是个人翻译文章,由于个人水平有限,有不对的地方请大家帮忙更正。 原文:dotnet-run 翻译:dotnet-run 名称dotnet-run – 没有任何明确的编译或启动命令...
  • SeayXu
  • SeayXu
  • 2016年07月30日 20:49
  • 312

BHO-嵌入资源管理器窗口(64位)

http://blog.csdn.net/ryanbanks/article/details/45868549   最初版本,32位。   在32位基础上,修改实现64位机器上的功能实现。 关键...
  • ryanbanks
  • ryanbanks
  • 2017年07月05日 17:24
  • 295

Dotnet IL Editor v2.6

 Dotnet IL Editor (DILE) is an editor program which helps modifying .NET assemblies. It is intended ...
  • linhanshi
  • linhanshi
  • 2007年10月28日 01:25
  • 639

BHO--嵌入资源管理器窗口

参考了别人提供的方法,自己补充完整了一些,就算作翻译吧。 资源管理器嵌入插件实现说明 一.           核心思想 添加子窗口,使插件窗口与资源管理器的文件列表窗口共同拆分右侧窗口。 二...
  • ryanbanks
  • ryanbanks
  • 2015年05月20日 11:25
  • 1128

『.NET Core CLI工具文档』(八)dotnet-restore

说明:本文是个人翻译文章,由于个人水平有限,有不对的地方请大家帮忙更正。 原文:dotnet-restore 翻译:dotnet-restore 名称dotnet-restore - 还原...
  • SeayXu
  • SeayXu
  • 2016年07月29日 22:46
  • 857

winform 嵌入资源读取使用

放入资源Resources  重命名为aaabyte[] _ResourcesBytes = global::AutoMakeCode.Properties.Resources.aaa; ...
  • cheng110110
  • cheng110110
  • 2011年06月09日 09:37
  • 1471

C#中使用嵌入的资源

1、嵌入资源 首先,我们来看一个简单的示例,了解如何实现嵌入。假设要在基于 Windows® 窗体的应用程序中嵌入一个名为1.jpg 的图形图像。首先,要将该文件添加到 Visual Studio®...
  • chenkeliang1990
  • chenkeliang1990
  • 2011年10月18日 20:19
  • 2526

嵌入资源

[Embed(source = "training.xml",mimeType = "application/octet-stream")]
  • wcy1010
  • wcy1010
  • 2014年10月29日 12:53
  • 281
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:dotnet中使用嵌入资源
举报原因:
原因补充:

(最多只允许输入30个字)