CLR via C#笔记——第二章

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

《CLR via C#》第二章:生成、打包、部署和管理应用程序及类型

.NET Framework部署目标

所有应用程序都使用来自Microsoft或其他厂商的动态链接库DLL,导致DLL hell。
大多数应用程序在安装时会影响到系统的全部组建,安装和卸载时可能会有残留。
应用程序安装会带来由不同公司开发的文件,如ActiveX控件,它们可能下载一些代码来执行任何操作,这会带来安全性问题。

将类型生成到模块中

使用csc.exe指示C#编译器生成可执行文件。

csc.exe /out:Program.exe /t:exe /r:MSCorLib.dll Program.cs

响应文件是包含一组编译器命令行开关的文本文件。

csc.exe @MyProject.rsp CodeFile1.cs CodeFile2.cs //指定响应文件

元数据描述

元数据是由几个表构成的二进制数据块。包含三种表,分别为定义表、引用表和清单表。
常见的定义表:
ModuleDef, TypeDef, MethodDef, FiledDef, ParamDef, PropertyDef, EventDef
常见的引用表:
AssemblyRef, ModuleRef, TypeRef, MemberRef
可以使用ILDasm.exe即IL Disassembler(IL反汇编器)查看源数据表。

将模块合并成程序集

程序集是一个或多个类型定义文件及资源文件的集合。
CLR操作的是程序集,总是先加载包含清单元数据表的文件,再根据清单来获取程序集中其他文件的名称。
程序集的特点:

  • 程序集定义了可重用的类型
  • 程序集用一个版本号标记
  • 程序集可以关联安全信息

程序集的优势:

  • 不同的类型使用不同的文件,可以以增量方式下载,对应用程序进行分批/部分的打包/部署
  • 可在程序集中添加资源或数据文件
  • 程序集包含的各个类型可以用不同语言实现。

程序集是进行重用、版本控制、应用安全性设置的基础单元。
VS中,利用解决方案选项,当前项目可以引用同一个解决方案中另一个项目创建的程序集。
同样可以使用程序集链接器AL.exe来创建程序集。也可以用AL.exe生成只含资源的程序集,即附属程序集。

程序集版本资源信息

对于VS项目,会在Properties文件夹中自动创建AssemblyInfo.cs文件。
程序集中的三个版本号:

  • AssemblyFileVersion:
    仅供参考,CLR不检查也不关心,可在Windows资源管理器中查看,根据它识别程序集版本号。
  • AssemblyInformationalVersion:
    仅供参考,CLR不检查也不关心,指出包含该程序集的产品的版本。
  • AssemblyVersion:
    存储与AssemblyDef清单元数据表中,是程序集的唯一性标识。CLR在绑定到强命名程序集时会使用。

语言文化

程序集将语言文化作为身份标识的一部分。
未指定具体语言文化的程序集称为语言文化中性

简单应用程序部署(私有部署的程序集)

在应用程序基目录或者子目录部署的程序集称为私有部署的程序集(privately deployed assembly),该程序集文件不和其他任何应用程序共享。

简单管理控制(配置)

为了实现对应用程序的管理控制,可在应用程序目录放入一个配置文件。CLR会解析文件内容来更改程序集文件的定位和加载策略。