CLR读书笔记第二章 生成,打包,部署和管理应用程序及类型

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 简单管理控制

原文地址:https://www.cnblogs.com/ry123/p/2786464.html