既然已经知道了怎样创建一个公钥/私钥对,创建强命名程序集就变得很容易了.只需把System.Reflection.AssemblyKeyFileAttribute特性的一个实例应用到我们的源代码中就可以了:
[assembly:AssemblyKeyFile("MyCompany.keys")]
当编译器在源代码中遇到该特性时,编译器将打开其中的指定的文件(MyCompany.keys),用私有密钥对程序集进行签名,并将公有密钥嵌入到清单中。注意只能对包含清单的那个程序集文件进行签名,程序集的其他文件不能被显式地签名.
下面是对程序集文件签名过程的一个详细解释:当生成一个强命名程序集时,该程序集的FileDef清单元数据表将包含组成该程序集的所有文件的一个列表。当每个文件的名称被加入到清单中时,该文件的内容也被转换成一个散列值,该散列值将和文件名一起存入FileDef表中。
我们可以用AL.exe的/algid命令行开关,或者应用于程序集上的System.Reflection.AssemblyAlgorithmIdAttribute定制特性来改变默认的散列算法.默认的算法为SHA-1算法.