C# Resources资源详解资源详解
1. Resource Basics
(1) Manifest Resources(资源清单)(资源清单)
资源在编译期间添加到程序集。如果要将资源嵌入到程序集,则必须将文件添加到项目中,文件会自动拷贝到项目文件夹的
Resources文件夹中。如果要嵌入到程序集,还需选中文件,修改其属性“生成操作”(Build Action)为“嵌入的资源”,默认
为“内容”。
一旦设置为嵌入的资源,则它就会成为资源清单中程序集的一部分。每一程序集,无论是静态的还是动态的,均包含描述该程
序集中各元素彼此如何关联的数据集合。程序集清单就包含这些程序集元数据。程序集清单包含指定该程序集的版本要求和安
全标识所需的所有元数据,以及定义该程序集的范围和解析对资源和类的引用所需的全部元数据。
(2) Naming Mainfest Resources
要查看一个已经正确嵌入到项目输出程序集中的文件,可以利用SDK工具 ildasm.exe,它其实就是 MSIL 反汇编程序,它能够
在你程序集的Mainfest视图里显示所有的嵌入资源。
它在ildasm中显示为 .mresource 入口,资源名称显示格式如下:
defaultNamespace.folderName.fileName
defaultNamespace 可以在项目的属性页面中“应用程序”Tab页面中进行更改。
(3) Loading Mainfest Resources
也通过程序来枚举清单,需要利用到 System.Reflection.Assembly 类的 GetMainifestResourceNames 方法。另外,还可以检
索特定类型的程序集,例如 Assembly 类还提供了 GetAssembly、GetCallingAssembly、GetEntryAssembly 和
GetExecutingAssembly 等。
// Get this type's assembly
Assembly asm =this.GetType().Assembly;
// Enumerate the assembly's manifest resources
foreach( string resourceName in asm.GetManifestResourceNames() ){
MessageBox.Show(resourceName);
}
Type 为 System.Reflection 功能的根,也是访问元数据的主要方式。使用 Type 的成员获取关于类型声明的信息,如构造函
数、方法、字段、属性 (Property) 和类的事件,以及在其中部署该类的模块和程序集。
表示某个类型是唯一的 Type 对象;即,两个 Type 对象引用当且仅当它们表示相同的类型时,才引用相同的对象。这允许使
用参考等式来比较 Type 对象。Type 类表示类型声明:类类型、接口类型、数组类型、值类型、枚举类型、类型参数、泛型
类型定义,以及开放或封闭构造的泛型类型。Object.GetType 方法返回表示实例类型的 Type 对象。
如果知道资源的名称,则可以通过 Assembly 类的方法 GetManifestResourceStream 方法加载指定的清单资源,资源名称大
小写敏感,而且是全称。例如:
// Get this type's assembly
Assembly asm =this.GetType().Assembly;
// Get the stream that holds the resource
// from the "ResourcesSample.Azul.jpg" resource
// NOTE1: Make sure not to close this stream,
// or the Bitmap object will lose access to it
// NOTE2: Also be very careful to match the case
// on the resource name itself
Stream stream =
asm.GetManifestResourceStream("ResourcesSample.Azul.jpg");
// Load the bitmap from the stream
this.BackgroundImage =new Bitmap(stream);
(4) Mainfest Resource Namespaces
如果传递给 GetMainfestResourcesStream 方法 一个System.Type 对象,则它会用此类型的命名空间当作嵌入资源的前缀的
一部分,如:
// Load the stream for resource "ResourcesSample.Azul.jpg"