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文件编译成本地文件

原文地址:https://www.cnblogs.com/chenxiaoran/p/2080254.html