标注:
①MSIL是CIL原来的名称,许多开发者仍沿用这一名称。
②所创建的通用中间代码保存在程序集中。
1,非托管代码:
特点:必须依赖于操作系统,编译出来的程序文件只包含适用于特定CPU架构的指令。
缺点:不同的操作系统之间需要编译不同的程序文件,重复低效。
2,托管代码:
最早是Java跨平台思想,.net是从2003年开始。
特点:
(1)开发者编写的代码编译后,不依靠特定的操作系统和特定的CPU架构机器指令,而是依赖一种中间的在各个系统上均能执行的代码,这种代码在java中称之为ByteCode(字节码), .Net中称之为MSIL(微软中间语言)。在C#中由VisualStudio将代码编译为通用中间语言,再由JIT编译器将MSIL编译为用于特定系统和目标机器架构的本机代码(JIT编译时在程序运行时动态发生)。
(2)不管是Java的ByteCode还是.net中的MSIL最终都是翻译成CPU可以执行的机器指令,这个功能是由一个运行在特定操作系统上的软件完成,这个软件称之为虚拟机。
3,生成的相关文件扩展名介绍:
exe:可执行文件
dll:动态链接库
pdb:调试数据库文件(包含编译后指向源码的位置信息,用于调试的时候位置定位,方便调试)
vshost.exe:用于提高调试效率的宿主进程。Vs调试时打开的其实是这个文件,用于使VS跟踪调试信息。
vshost.exe.manifest:是一个XML文件,用于COM类,接口库的绑定和激活,这些信息以前在注册中。