2.1 .NET Framework部署目标
1. 口碑不佳的原因:
@1 所有的应用程序都来自各个厂商动态链接库DLL,
@2 安装复杂;
@3 安全性;
2. .NET Framework正在尝试传递解决 DLL hell问题
2.2 将类型生成大模块中
1. 如何将多个类型的源代码文件生成为一个可以部署的文件
2. 响应文件: 是一个文本文件,包涵一组编译器命令行开关;
2.3 元数据概述
一个托管PE文件由4部分组成: PE32(+)头,CLR头,元数据,IL;
1. PE32(+)头是windows要求的标准信息;
2.CLR头: 是那些需要CLR的模块特有的;
3. 元数据: 是一个二进制数据块,由几个表组成: 定义表,引用表,清单表.
(1)常用的定义表 definition table
@1 ModuleDef: 总是包涵一个标识模块的记录项;
@2 TypeDef:模块中定义的每个类型都在这个表中有一个记录项;
@3 MethodDef: 模块中定义的每个方法都在这个表中有一个记录项;
@4 FieldDef: 模块中定义的每个字段都在这个表中有一个记录项;
@5 ParamDef: 模块中定义的每个参数都在这个表中有一个记录项;
@6 PropertyDef: 模块中定义的每个属性都在这个表中有一个记录项;
@7 EventDef: 模块中定义的每个事件都在这个表中有一个记录项;
(2) 常用的引用表:
@1 AssemblyRef: 模块中引用的每个程序集在这个表中都有一个对应的记录项;
@2 ModuleRef: 引用的模块在这个表中都有一个记录项;
@3 TypeRef: 模块引用的每个类型在这个表中都有一个记录项;
@4 MemberRef: 模块中引用的每个成员都在这个表中有一个记录项;
(3) 清单元数据表: AssemblyDef,FileDef,ManifestResourceDef,ExportedTypeDef;
2.4 将模块合并成程序集
1. CLR总是首先加载包涵"清单"元数据表的文件.再根据这个清单来获取程序集中的其他文件名称;
2. 程序集使可重用类型的逻辑表示和物理表示能够区分开.
3. 使用多文件程序集的理由;
@1 可用单独的文件对类型进行划分;
@2 可在自己的程序集中添加资源或数据文件;
@3 程序集中包涵的各个类型可以使用不同的语言来实现;
4. C#生成程序集的开关: /t[arget]:exe ; /t[arget]:winexe ; /t[arget]:library; t[atget]:module--生成不含清单的元数据表的PE文件;
5. 使用 AL.exe创建程序集
2.5 程序集版本资源信息
1. 可以使用定制的Attribute来设置版本资源字段 VS会自动创建一个AssemblyInfo.cs文件
2. 版本号: 2.5.719.2 主版本号.次版本号.内部版本号.修订号;
@1 AssemblyFileVersion 仅供参考;
@2 AssemblyInfomationalVersion 仅供参考;
@3 AssemblyVersion 非常重要.唯一的标示了一个程序集;
2.6 语言文化
1. 语言文化也是程序集标识的一部分
2. 附属程序集(satellite assembly): 标记了一种具体语言文化的程序集;
使用AL.exe生成附属程序集,使用开关/c[ulture]:text来指定一种语言,text是语言字符串
2.7 简单应用程序部署
1. 私有部署: 部署到和应用程序相同的目录中的程序集;
2.8 简单管理控制