【CLR Via C#】2 程序集

1 定义:

  • 程序集是net 应用程序的部署单元,是组件服用,以及实施安全策略和版本策略的最小单元。
  •  程序集是包含一个或者多个类型定义文件和资源的集合
    本地dll或exe与程序集不同
         net 程序集包含元数据(注:描述了程序集中定义的所有类型及其成员信息,即方法、属性、事件和字段)

2 结构:

     
    
  这些结构可以在一个文件中也可以在几个文件中。分布在一个文件中的情况是如上图所示,对于分布到不同文件下,如图2-2
 

3 私有程序集和共享程序集

  • 私有程序集:默认是私有程序集,位于应用程序所在的同一个目录下,或者位于其子目录中。
  • 共享程序集:必须有一个版本号,通常安装在(global assembly cache位于Windows/assembly)。任何程序都可以引用他;一般在一个大型应用程序分布在几个子项目中是,常常需要使用共享程序集。
  • 强名:为了保护共享程序集的唯一性,我们必须在共享程序集上加上密钥。如果密钥不同即使两个组件名称相同也不是同一个组件。
4 创建程序集
 
  对应于上面第二点说明的一个程序集中分别在不同的文件中。这其中模块的作用其一模块能够更快的启动程序集,并且并不是所有类型都在一个文件中;其二在使用多种编程语言来创建一个程序集(如:一个模块用vb编写,另外一个模块用c#编写,并且这两个模块都包括在一个程序集中。如下图的例子,就是印证第二点的多个文件创建程序集
 

5 应用程序域

  Dot Net 建立的可执行程序.exe;并没有直接挂载到进程中,而是承载在应用程序域上。应用程序域可以看成轻量级别的进程。一个应用程序域可以装载一个可执行程序exe或者多个程序集。AppDomain 类用于创建和终止应用程序域,加载和卸载程序集和类型,以及枚举应用程序域中的程序集和线程。
  •      对于用AppDomain进行创建应用程序域并且加载程序集,例子如下所示
  
//文件2.cs
using System;
public class Bar
{
    public static void Main()
    {
        Console.WriteLine("Bar");
    }
}
//1.cs
using System;
using System.Reflection;

public class temp{
     public static void Main()
     {
          AppDomain testDomain=AppDomain.CreateDomain("TestDomain");
          Console.WriteLine(testDomain.FriendlyName);//"TestDomain"
          //通过调用程序集2.exe,并且执行输出“bar”
          testDomain.ExecuteAssembly("2.exe");
     }
}
  • 对于销毁应用程序域可以直接调用:AppDomain.Unload(testDomain);可以直接销毁应用程序域
posted @ 2014-03-19 22:36  卤鸽  阅读(338)  评论(0编辑  收藏  举报