dotnet中使用嵌入资源

2024-04-17 01:32
文章标签 使用 资源 嵌入 dotnet

本文主要是介绍dotnet中使用嵌入资源,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近打算做一个将 excel 文件转为 xml 的 pipeline component ,过程中需要给这个组件做个 ICON ,就需要处理位图和把 icon 作为资源嵌入到程序集中,使用时在程序集中找到 icon 的资源还原成 icon 。嵌入资源部分以前一直没做过,这回借机把嵌入资源部分的内容学习一下。
Dotnet 中嵌入资源(位图、图标或光标等)有两种方式,一是直接把资源文件加入到项目,作为嵌入资源,在代码中通过 Assembly 的 GetManifestResourceStream 方法获取资源的 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中使用嵌入资源的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/910456

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

【北交大信息所AI-Max2】使用方法

BJTU信息所集群AI_MAX2使用方法 使用的前提是预约到相应的算力卡,拥有登录权限的账号密码,一般为导师组共用一个。 有浏览器、ssh工具就可以。 1.新建集群Terminal 浏览器登陆10.126.62.75 (如果是1集群把75改成66) 交互式开发 执行器选Terminal 密码随便设一个(需记住) 工作空间:私有数据、全部文件 加速器选GeForce_RTX_2080_Ti