CLR via c#--共享程序集和强命名程序集
CLR支持两种程序集:弱命名程序集和强命名程序集
两种程序集结构上完全相同,唯一的区别在于强命名程序集用发布者的公钥/私钥对进行了签名,它唯一性的标识了程序集的发布者。
私有部署的程序集:
是指部署到应用程序基目录或者子目录的程序集。弱命名程序集只能以私有的方式部署
公有部署的程序集:
是指部署到一些已知位置的程序集,因为CLR在查找程序集的时候,会检查这些已知的位置。
一个强命名程序集的4个重要的attributes:
1.一个文件名
2.一个版本号
3.一个语言文化标识
4.一个公钥
创建强命名程序集的工具SN.exe
运行命令:SN -k MyCompany.snk
全局程序集缓存(GAC):
如果一个程序集要由多个应用程序访问,必须把它放到一个已知目录中,而且CLR在检测到对该程序集的引用时,必须知道自动检查该目录
这个已知目录就叫做全局程序集缓存。通常位于:c:\windows\Assembly
运行时如何解析类型引用:
public sealed class Program
{
public static void Main()
{
System.Comsole.WriteLine("Hi");
}
}
1.CLR首先会读取程序集的CLR头,查找标识了应用程序入口方法(main)的MethodDefToken
2.CLR检索MethodDef元数据表,找到该方法的IL代码在文件中的偏移量
3.把IL文件编译成本地文件