这是我参与 11 月更文挑战的第 6 天,活动详情查看:2021 最后一次更文挑战
程序集
程序集 一个以公共语言运行库CLR为宿主的版本化的自描述的二进制文件。 程序集的文件形式多以.exe .dll代码库 。.NET由多个程序集拼装而成,这样程序集就能促进代码重用 。
程序集确定类型边界:
- 类型的完全限定名:命名空间+类型名称
- 类型标识:完全限定名 +程序集
可版本化
程序集是可版本化的单元。 版本格式 <major>.<minor>.<build>.<revision> 默认自动分配 1.0.0.0
manifest
- 程序集的清单 用于描述程序集自身信息(名称、 版 需要的外部程序集等)的元数据块
blob。 - 其他的元数据 描述程序集包含的每一个类型的组成(成员名称、 实现的接口 、基类、构造函数 )。
配置
程序集基于XML的配置文件进行配置
- 共享程序集 部署在全局程序集缓存(GAC)
- 私有程序集 在调用客户端应用程序处于同一目录(应用程序目录)下(或子目录下)
程序集的格式
单文件程序集
(逻辑 )程序集和实际的(物理)二进制文件是一 一对应 ,包含在.exe .dll
多文件程序集是模块的集合 这些模块作为单个逻辑单元进行部署和版本化 其中一个作为 主模块 包含程序集级别的清单(必要的CIL代码 元数据 头信息 可选资源) 清单记录依赖的每一个相关模块
辅助模块的扩展名 *.netmodule 辅助模块也包含CIL代码和类型元数据 模块级别的清单 记录该模块的引用的外部程序集
优点:提高程序下载的效率 允许模块由不同的.NET语言编写
多文件程序集
使用命令构建 csc.exe
csc /t:module ufo.cs 生成ufo.netmodule
csc /t:library /addmodule:ufo.netmodule /out:airvehicles.dll helicopter.cs 生成 airvehicles.dll
.file 多文件程
序集中的关联模块 .class extern 主模块从辅助模块中引用的外部类型名
*.netmodule 没有自己的独立版本号 CLR不能直接加载 只能通过主模块加载(含有程序集的清单)
私有程序集
全标识 包括 友好名称(模块包含程序集清单 的 名字减去文件扩展名)、数字版本号(.ver)
探测 probing 解析私有程序集的位置 把外部程序集请求映射到被请求的二进制文件位置的过程
隐式(CLR查询清单的.assembly extern标记来解析程序集位置)
显示(编程方式调用System.Reflection.Assembly的Load() LoadForm()方法 后期绑定或动态调用类型成员时) Assembly asm=Assembly.Load("CarLibrary");




近期评论