强名称(2)引用强名称签名的程序集2014-07-03引用强名称程序集的过程对我们来说都是透明的,无需做额外的工作。可以通过这种方式来检验强名称程序集的作用。首先创建一个类库项目StrongNameReferenceLib,对其进行强名称签名。

图9-16引用强名称程序集接下来修改之前创建的StrongName项目,让它引用StrongNameReferenceLib项目(如图9-16),调用其GetHello方法。StrongNameReferenceLib项目的主要代码如代码清单9-6所示。代码清单9-6 StrongNameReferenceLib项目主要代码
using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace StrongNameReferenceLib{public class Class1{public static string GetHello(){return "Hello";}}}
修改后的StrongName项目代码如代码清单9-7所示。代码清单9-7 StrongName项目代码
using System.Text;using System.Reflection;using StrongNameReferenceLib; namespace StrongName{class Program{static void Main(string[] args){Console.WriteLine(Class1.GetHello()); Console.Read();}}}
重新编译StrongName项目,得到新的StrongName.exe文件。使用ILDasm打开StrongName.exe文件,查看它的程序集清单,如图9-17所示。
图9-17 StrongName.exe程序集清单从程序集清单可以看到,它引用了两个具有强名称签名的程序集:mscorlib和(新创建的)StrongNameReferenceLib,对两个程序集分别添加了版本和publickeytoken标识。下面去除StrongNameReferenceLib的强名称签名,重新编译该项目,但不重新编译StrongName项目,而用新生成的StrongNameReferenceLib.dll替换StrongName.exe之前引用的StrongNameReferenceLib.dll,看看会发生什么事情。结果如图9-18所示。
图9-18StrongName项目替换dll之后结果从图9-18的异常信息可以看到,StrongName项目找不到匹配的程序集。原因在于在StrongName的程序集清单中存储着PublicKeyToken值,而没有强名称签名的项目是没有该属性的。作者:玄魂出处:http://www.cnblogs.com/xuanhun/