记录每一点进步

王志印的博客
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

第二章
生成,打包,部署以及管理应用程序与类型(type)
1。.net框架部署目标
windows的坏名声,a)DLL hell,b)复杂的安装过程,c)安全问题(web)
.net对三个问题提供了解决方案
2。将类型生成为模块
public class App{
 static public void main(System.String[] args){
  System.Console.WriteLine("hi");
 }
}
执行命令csc.exe /out:App.exe /t:exe /t:MSCorLib.dll App.cs
生成一个可执行文件App.exe
/t:MSCorLib.dll告诉编译器到MSCorLib.dll文件标识的程序集中查找外部类型,MSCorLib.dll是一个特殊的文件,包含
了.net框架中的所有核心类型,由于这些类型使用很频繁,编译器会自动引用该程序集。
所以上述命令等价与csc.exe /out:App.exe /t:exe  App.cs
/out:App.exe /t:exe是默认设置,所以也等价与csc.exe App.cs
如果不想让编译器引用MSCorLib.dll可以使用/nostdlib.
  编译输出App.exe是一个标准PE文件,windows支持两种类型的应用程序CUI和GUI。托管PE文件包括4部分:PE表头、CLR
表头、元数据和IL代码。其中PE表头是windows操作系统要求的标准信息。CLR表头用于那些需要CLR才能运行的模块,包含和模块一起创建的主版本号和次版本号。
  元数据实际就是一块二进制数据,包含一些表:定义表、引用表、和清单表
常见的定义表:ModuleDef、TypeDef、MethodDef、FieldDef、ParamDef、PropertyDef、EventDef,利用定义表,代码
中定义的任何内容都会导致一个条目在相应的表中被创建。
引用表的作用是记录编译器检测源代码中引用到的类型、字段、方法、属性和事件。

使用ILDasm.exe:IL反编译器