23.03.21 《CLR via C#》 笔记2

第二章 生成、打包、部署和管理应用程序及类型

  1. .NET Framework部署目标

    1. DLL hell: 安装新应用程序时破坏另一个安装好的程序
    2. 安装的复杂性:安装时涉及复制文件、注册表、快捷方式等,除了使用安装程序以外很难直接复制程序
    3. 安全性:代码可以执行任何操作,比如删除文件、发送电子邮件等
  2. 响应文件:包含一组编译器命令行的文本文件

  3. 元数据:由几个表构成的二进制数据块

    1. 定义表:模块的标识、类型、方法、字段、参数、属性、事件等
    2. 引用表:代码引用的类型、字段、方法、属性和事件等
    3. 清单表:程序集中的资源清单、public类型清单等
  4. 作者推荐使用多文件程序集

  5. 将模块合并成程序集的方法

    1. 使用C#编辑器
    2. 使用程序集链接器(AL.exe)
  6. 在PE文件中嵌入版本资源信息(windows资源管理器中详细信息显示的各种版本信息)

  7. 程序集的身份标识中还包括语言文化(区域性)

  8. 私有程序集的部署(安装)

    1. 直接复制文件(运行时在应用程序目录查找引用的程序集)
    2. 打包成MSI文件等,实现程序集按需安装
    3. 使用VS的功能发布应用程序
  9. 简单管理控制(配置)
    使用配置文件(XML),比如指定当前文件夹中查找不到程序集时,在哪个文件夹中查找

第三章 共享程序集和强命名程序集

  1. 私有部署和全局部署:私有是程序集部署到应用程序的基目录或子目录;全局是部署到公认位置
  2. 强命名程序集使用公钥/私钥进行签名,可以进行全局部署
  3. 程序集的强名称:由文件名、版本号、语言文化(Culture)、公钥(公钥的最小哈希)组成
  4. 创建强命名程序集
    1. 获取密钥(SN.exe)
    2. 编译器用私钥对程序集进行签名,将公钥嵌入清单
  5. 部署强命名程序集:放入公认的位置全局程序集缓存(GAC)(用工具放入,不要手动复制进去)
  6. 引用强命名程序集
    1. 指定了完整路径
    2. 只有文件名,按顺序在 工作目录、CSC目录、/lib编译器指定目录、LIB环境变量目录
    3. 不在GAC中查找,因为GAC的结构未知,无法指定路径
    4. CSC还可以指定字符串如 “Name,Version=xxx,Culture=xxx, PubKeyToken=xxx”
  7. 防篡改:用私钥签名后,检查文件哈希值与公钥解除签名后的值是否一致
  8. 延迟签名:开发时只使用公钥,但不用私钥签名(但是记录项中仍然有正确的公钥)
  9. CLR查找类型
    1. 类型在当前文件中
    2. 类型在当前程序集中,在另一个文件中
    3. 类型在另一个文件,另一个程序集中
  10. 版本控制:使用配置文件,指定程序集版本号,程序集更新后,修改配置文件CLR即可加载新的程序集;此处的修改,可使用配置文件自动进行(安装更新后的程序集时,自动修改配置文件)

你可能感兴趣的:(读书笔记,c#,windows,开发语言)