22.2.2 程序集清单
一个程序集清单对于一个程序集来讲是必需的,可见它的重要性。本节将介绍程序集清单所包含的内容,如下:
❑程序集的名称:程序集的文本名称,也可以有一个强名称;
❑程序集的版本号:版本号的格式为<主版本号>.<次版本号>.<构建版本号>.<修正版本号>,例如当前我们使用的Visual Studio 2010的版本为10.0.30319.1;
❑程序集的区域性:当前程序集所支持的文化和语言;
❑程序集中所包含的文件列表,同时包括这些文件的哈希值;
❑类型引用信息,CLR用于将类型引用映射到包含其声明和实现的文件的信息。
❑程序集依赖的所有其他程序集及版本号;
要查看程序集的清单,需要使用ILDasm工具。这里以本书示例代码所在的程序集清单为例。注意,这里只是一部分主要内容,做了必要的删减,如代码清单22-4所示。
代码清单22-4 程序集清单
//Metadata version:v4.0.30319
.assembly extern mscorlib
{
.publickeytoken=(B7 7A 5C 56 19 34 E0 89)//.z\V.4..
.ver 4:0:0:0
}
.assembly extern System.Runtime.Serialization.Formatters.Soap
{
.publickeytoken=(B0 3F 5F 7F 11 D5 0A 3A)//.?_……:
.ver 4:0:0:0
}
.assembly extern System.Core
{
.publickeytoken=(B7 7A 5C 56 19 34 E0 89)//.z\V.4..
.ver 4:0:0:0
}
.assembly extern Microsoft.CSharp
{
.publickeytoken=(B0 3F 5F 7F 11 D5 0A 3A)//.?_……:
.ver 4:0:0:0
}
.assembly ProgrammingCSharp4
{
//—-The following custom attribute is added automatically;do not
uncomment.———-
//.custom instance void[mscorlib]System.Diagnostics.DebuggableAttribute:.ctor(bool,
//bool)=(01 00 00 01 00 00)
.hash algorithm 0x00008004
.ver 1:0:0:0
}
.module ProgrammingCSharp4.exe
//MVID:{65067A42-5B73-4B47-9CC7-4E549C33EBC9}
.imagebase 0x00400000
.file alignment 0x00000200
.stackreserve 0x00100000
.subsystem 0x0003//WINDOWS_CUI
.corflags 0x00000003//ILONLY 32BITREQUIRED
//Image base:0x04020000
需要说明的是,上述的程序集清单做过删减,不然内容过多无法突出重点。乍一看,程序集清单中的内容多而且杂,特别是在不了解里面的内容的情况下更会给人这种感觉,表22-2中对上述程序集清单中的部分指令做了解释和说明。