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中对上述程序集清单中的部分指令做了解释和说明。

22.2.2 程序集清单 - 图1