摘录自——百度百科 assembly, 这里把它翻译为配件, 以示和组件(Component)加以区别. 一个配件有时候是指一个EXE或者DLL文件, 实际上是一个应用程序(就是指带有主程序 入口点的模块)或者一个库文件. 但是配件实际上可以是由一个或者多个文件组成 (dlls, exes, html等等), 代表一组资源, 以及类型的定义和实现的集合. 一个配件也可 以包含对其它配件的引用. 所有这些资源、类型和引用都在一个列表(manifest)中描述 也是配件的一部分,所以配件是一个自我描述的,不需要其它附加的部件 对其描述!配件的另一个重要特性是,它是.Net环境下类型标识的一部分,也可以说 是基本单位。因为,区分一个类型的标识就是包含这个类型的配件名字加上类型名本身。 举个例子,配件A定义了类型T, 配件B也定义了同名类型T,但是.Net把这两个类型认为是 不同的类型。 注意,不要把配件(assembly)和名字空间(namespace)混淆起来。其实 名字空间仅仅是用来把类型名用树的形式组织起来的手段。对于运行是环境来讲,类型名 就是类型名,和名字空间一点关系都没有。 总之,记住配件名加上类型名唯一标识一个 运行时类型。 另外,配件也是.Net框架用于安全策略的基本单位,许多安全策略都是 基于配件的。 在传统的Windows应用程序开发中,动态连接库(DLL)为软件提供了一种重要的可重用机 制。同样组件对象模型(COM)也通过DLLs和EXEs的形式提供了组件重用机制。在.NET的世 界里, 则由"assembly"(译者注:可以翻译为"程序集",不过感觉不十分贴切,因此以 下均保留了英文原文)提供了类似的可重用的代码绑定机制。Assembly中包含了可以在 CLR(Common Language Runtime)中执行的代码。所有的.NET应用程序都是由一个或多个 assembly组成的,不论你在创建一个Console, WinForms,WebForms应用程序或者一个类 库时,实际上你都是在创建assembly。甚至.NET本身也是通过assembly来实现其功能。 一个assembly可以由一个或者多个文件组成,简单来说,你可以把assembly理解成一个 逻辑上的DLL。每个assembly必须有一个单独的执行入口如DllMain, WinMain, Main等。 Assembly也有一套配置(Deploying)和版本控制(Versioning)的机制。和传统的DLL 等COM组件相比,.NET有着明显的优点(我们将在后面看到),另外它还可以避免一些诸 如DLL兼容性等问题的困扰(地狱般的困扰,译者深有体会),并可以大大简化配置上存 在的问题。