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

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

1.1   .net framework 部署目标

Windows一直不稳定和过于复杂(其实也很封闭,逐渐开放,如core),微软认为主要原因是:

(1)应用程序来自微软或其他厂商的dll,多个厂商的代码带来复杂性。安装新程序会破坏原有程序,带来dll hell。

(2)安装复杂性。大多数应用安装的时候会影响到系统的全部组件。

(3)安全性。安装程序会带来各种文件,许多不同公司开发的。

1.2   将类型生成到模块中

响应文件包含一组编译器命令开光的文件,执行csc.exe时,编译器打开响应文件,并使用其中包含的所有开关。

1.3   元素据概述

元素据是由几个表构成的二进制数据块,分别是定义表、引用表、清单表。

模块元素据常用定义表如下:


元素据定义表名称


说明


Moduledef


总是包含对模块进行标识的一个记录项,该记录项包含模块文件名、拓展名、模块版本ID


Typedef


模块定义的每个类型在这个表中都有一个记录项,包含类型名、基类型、标志(public、private)、索引,索引指向Moduledef表中该类型的方法、fielddef表中该类型的字段、propertydef表中该类型的属性以及eventdef表中该类型的事件


Methoddef


模块定义的每个方法在这个表中都有一个记录项,包含方法的名称、标志(private、public、virtual、abstract,static、final)签名、方法的IL代码在模块的偏移量。还引用了paramdef表中的一个记录项,包括与方法参数有关的更多信息。


Fielddef


模块定义的每个字段在这个表中都有一个记录项,每个记录项都包含标志(private、public)、类型和名称


paramdef


模块定义的每个参数在这个表中都有一个记录项,包含标志(in、out、retval)、类型和名称


Propertydef


模块定义的每个属性在这个表中都有一个记录项,包含标志、类型和名称


Eventdef


模块定义的每个事件在这个表中都有一个记录项,包含标志和名称

编译器还会检测源代码引用的类型、方法、字段、属性、事件,并创建相应的元素据表记录项。在创建的元素据中包含一组引用表,记录了所引用的内容,常用的引用元数据表如下:


引用元素据表名称


说明


Assemblyref


模块引用的每个程序集在这个表中都有一个记录项。包含绑定该程序集所需的信息:程序集名称、版本号、语言文化、公钥token。还包含一些标志(flag)和一个哈希值(忽略)。


Moduleref


实现该模块所引用的类型的每个PE模块在这个表中都有一个记录项,包含模块的文件名和拓展名。可能是别的模块实现了需要的类型,这个表的作用便是建立同那些类型的绑定关系。


typeref


模块引用的每个类型在这个表中都有一个记录项。记录项包含类型的名称和一个引用(指向位置)。


memberref


模块引用的成员(字段方法、属性方法、事件方法)在这个表中都有一个记录项,包含成员的名称和签名,并指向对成员进行定义的那个类型的typeref记录项。

ILDasm.exe是检查托管PE的常用工具,通过命令 ILDasm program.exe

原文地址:https://www.cnblogs.com/lzcgis/p/10251697.html

时间: 2024-08-04 08:58:51

生成、打包、部署和管理应用程序及类型(二)的相关文章

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

1. 概述 本章重点解释如何生成仅供自有应用程序使用的程序集. 2. 名词解释 ① 响应文件:是一个文本文件(扩展名rsp),包含一组编译器命令行开关.执行CSC.exe时可以直接读取并应用这些开关. 3. 主要内容 3.1 部署目标 ① 解决 DLL hell. ② 解决 安装时的复杂性. ③ 增强 安全性. 3.2 将类型生成到模块中 ① CSC.exe 3.3 元数据概述 元数据是一个二进制数据块,由几个表组成.这些表分为三个类别:定义表.引用表和清单表. ① 常用的定义表:ModuleD

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

2.1 .Net Framework部署目标 2.2将类型生成到模块中 本节讨论如何将包含多个类型的源代码文件生成为一个可部署的文件. System. Console是Microsoft已经实现好的一个类型,用于实现这个类型的各个方法的IL代码存储在MSCorLib.dll文件中. 2.3元数据概述 Program.exe中到底包含什么内容呢? 一个托管PE文件有4个部分组成:PE32(+)头.CLR头.元数据以及IL. PE32(+)头是Windows要求的标准信息, 元数据是一个二进制数据块

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

目录: 2.1 .NET Framerwork部署目标 2.2 将类型生成到模块中 2.3 元数据概述 2.4 将模块合并成程序集 2.5 程序集版本资源信息 2.6 语言文化 2.7 简单应用程序部署(私有部署的程序集) 2.8 简单管理控制(配置) 2.1 .NET Framework部署目标 Windows 多年来一直因为不稳定和过于复杂而口碑不佳. 有及方面原因.首先所有应用程序都要使用动态链接库(Dynamic-Link Library,DLL) 1.安装新应用程序时,它可能莫名奇妙破

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

使用csc.exe,通过命令行来编译源代码,生成IL代码,如下 csc.exe /out:Program.exe /t:exe /r:MSCoreLib.dll Program.cs 意义:指示C#编译器生成一个名叫Program.exe的可执行文件 MSCoreLib.dll是一个特殊的文件,它包含所有的核心类型:Byte,Char,String,Int32等等,因为操作非常频繁,C#编译器会自动引用该程序集,所以上述的命令行代码可以省略/r开关,也可以使用/nostdlib开关,不去引用该程

.NET那点事 (03)生成、部署和管理

生成.部署和管理1 如何生成强签名的程序集2 如何把程序集放入GAC中3 延迟签名及其作用4 程序集的版本分哪几部分 1 如何生成强签名的程序集在生成程序集时,CLR提供了两种可选类型:强签名程序集.弱签名程序集. 强签名程序集是一个带有公钥和数字签名的程序集,每个强签名都可以由四个元素来唯一标识,它们分别是:文件名.版本号.语言文化和公钥.这些信息都被包含在程序集的清单之中.相对于强签名程序集,弱签名程序集拥有完全一样的元数据.CLR文件头和程序集清单,唯一不同的是弱签名程序集没有公钥,也不进

Vs2010winform程序打包部署

1.新建安装部署项目 打开vs2010,选择文件->新建->项目->其他项目类型->安装和部署->选择安装项目.如下图: 2.开始制作 点击如上图中确定后进入项目开始制作: 2.1点击"应用程序文件夹"右击选择添加->文件夹或者双击"应用程序文件夹"在右边的空白处右击选择添加->文件夹.如下图: 2.2将自己开发项目中对应的文件添加到安装部署对应的文件夹中,这里我就把自己开发项目中的Dict文件夹中的文件添加到安装部署项目中

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

1.概念:Eureka 服务发现框架 2.具体内容 对于服务发现框架可以简单的理解为服务的注册以及使用操作步骤,例如:在 ZooKeeper 组件,这个组件里面已经明确的描述了一个服务的注册以及发现操作流程,在整个 Rest 架构里面,会存在有大量的微服务的信息. 在 SpringCloud 之中使用了大量的 Netflix 的开源项目,而其中 Eureka 就属于 Netflix 提供的发现服务组件,所有的微服务在使用之中全部向 Eureka 之中进行注册,而后客户端直接利用 Eureka 进

Windows程序的打包,部署(vs项目打包vs2013)---ShinePans

Windows 应用程序在开发完毕之后,怎样将程序打包并制作成安装程序在客户机上部署 是每一个windows应用程序开发完毕之后都必须面对的问题. 学习目标:                    部署机制:    三类文件  bin文件. obj文件.My Project文件 bin:   bin/debug     bin/release 这两个目录存放编译的结果以及可执行程序 exe obj:用来保存每一个模块的编译结果,这是.net的优势所在,java程序猿所羡慕的地方,由于微软有一个强

VS2013程序打包部署(图解)

首先要说明的是VS解决方案配置下的Debug模式和Release模式有什么区别.Debug模式通常称为调试模式,它包含调试信息,未对代码进行优化,方便程序员调试程序:Release模式通常叫做发布模式,不包含调试信息,但是它对代码进行了优化,使程序代码和运行速度都是最优的.因此我们在发布系统之前,一定要保证系统没有Bug,也就是在Debug模式下能够成功生成解决方案.解决方案配置转换方式详见下图: 现在我们只需要保证Debug模式下没问题就行,暂时不用管Release模式. 接下来就是我们今天的