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

Posted 走过的路 填过的坑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第二章 生成打包部署和管理应用程序及类型相关的知识,希望对你有一定的参考价值。

本章内容:

  • .NET Framework部署目标
  • 将类型生成到模块中
  • 元数据概述
  • 将模块合并成程序集
  • 简单应用程序部署(私有部署程序集)

2.1 .NET Framework部署目标

1、Windows多年来一直因为不稳定和过于复杂而口碑不佳,要归咎于几方面的原因:

①所有应用程序都使用来自Microsoft或者其他厂商动态链接库(Dynamic-Link Library,DLL)--DLL hell。

②安装的复杂性。大多数应用程序在安装时会影响到系统的全部组件。

③涉及安全性。应用程序安装时会带来各种文件,其中许多是由不同的公司开发的。此外,Web应用程序经常会悄悄下载一些代码(比如ActiveX控件),用户根本注意不到自己的机器上安装了这些代码。

2、.NET Framework正在尝试彻底解决DLL hell的问题,还在很大程度上解决了应用程序状态在用户硬盘中四处分散的问题。如:类型不再需要注册表中的设置。

2.2 将类型生成到模块中

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

  csc.exe /out:Program.exe /t:exe Program.cs

  cse.exe Program.cs

2、响应文件:是包含一组编译器命令行开关的文本文件。执行CSC.exe时,编译器打开响应文件,并使用其中包含的所有开关。在命令行中,在@符号之后指定相应文件的名称。例如:假定响应文件MyProject.rsp包含以下文本:

/out:MyProject.exe

/target:winexe

为了让CSC.exe使用这些设置,调用方式如下:

csc.exe @MyProject.rap CodeFile1.cs CodeFile2.cs

2.3 元数据概述

1、托管的PE文件由4部分构成:PE32(+)头、CLR头、元数据以及IL。

2、元数据是由几个表构成的二进制数据块。有三种表:定义表(definition table)、引用表(reference table)、清单表(manifest table)。

常用的元数据定义表包括:ModuleDef、TypeDef、MethodDef、FiledDef、ParamDef、PropertyDef、EventDef。

编译器编译源代码时,代码定义的任何东西都会导致定义表中创建一个记录项,此外,编译器还会检测源代码引用的类型、字段、方法、属性和事件,并创建相应的元数据表记录项。在创建的元数据中包含一组引用表,它们记录了所引用的内容。

常见的引用元数据表:AssemblyRef、ModuleRef、TypeRef、MemberRef。

2.4 将模块合并成程序集

1、程序集(assembly):是一个或多个类型定义文件及资源文件的集合。在程序集的所有文件中,有一个文件容纳了清单(manifest),清单也是一个元数据集合,表中主要包含作为程序集组成部分的那些文件的名称。还描述了程序集的版本、语言文化、发布者、公开导出的类型以及构成程序集的所有文件。

2、CLR操作的是程序集。CLR总是首先加载包含“清单”元数据表的文件,再根据“清单”来获取程序集中的其他文件的名称。

3、程序集的重要特点:程序集定义了可重用的类型;程序集用一个版本号标记;程序集可以关联安全信息。

4、使用程序集将可重用类型的逻辑表示与物理表示分隔开来。使用多文件程序集的三点理由:

①不同的类型用不同的文件,使文件能以“增量”方式下载。另外,将类型划分到不同的文件中,可以对购买和安装的应用程序进行部分或分批打包/部署。

②可在程序集中添加资源或数据文件。

③程序集包含的各个类型可以用不同的编程语言来实现。

清单元数据表:AssemblyDef、FileDef、ManifestResourceDef、ExportedTypesDef。

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

1、在应用程序基目录或者子目录部署的程序集成为私有部署的程序集(privately deployed assembly),这是因为程序集文件不和其他任何应用程序共享---原来我一直以来部署的都是私有部署的程序集哦。

2、每个程序集都用元数据注明了自己引用的程序集,不需要注册表设置。引用程序集限定了每个类型的作用域,也就是说,一个应用程序总是和它生成和测试时的类型绑定。

3、以私有方式部署程序集,可以对程序集的命名、版本和行为进行最全面的控制。

 

以上是关于第二章 生成打包部署和管理应用程序及类型的主要内容,如果未能解决你的问题,请参考以下文章

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

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

BI系统打包Docker镜像及部署的技术难度和实现

BI系统打包Docker镜像及部署的技术难度和实现

Gradle 功能简介及使用

将项目打包成War包与打包成Jar包的区别及应用场景