首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

.exe资料,DotNet 还是 Native

2013-10-08 
.exe文件,DotNet 还是 Native?现象:你双击一个exe文件,过了一会系统提示你这个程序的运行需要.net Framewo

.exe文件,DotNet 还是 Native?

现象:

  你双击一个exe文件,过了一会系统提示你这个程序的运行需要.net Framework. 

问题:

  到底一个.exe文件是Native Program还是.net Program?

问题的阐述:

  在了解背后的故事之前, 这个现象给我对DotNet架构,DotNet程序和Native Windows程序之间的关系的理解造成了困惑:本来应该是很容易理解的,DotNet 跟JAVA一样, 利用runtime(或者call Virtual mechine) 来方便代码的移植,提供垃圾回收、安全保护等机制。 这样说来,Native code是有OS的进程调度程序载入。而DotNet程序(文件),跟JAVA一样,应该有一个比如.dn的后缀,双击后由注册的CLR(common language runtime, DotNet的"虚拟机")负责调度运行。

  但是事实是,DotNet程序的后缀一样是.exe,和Native Code一样。这就让人糊涂了:为什么这两个是一样的,我要怎么区别,背后的机制是怎么样的?


在讨论这个机制前,让我们先看看Native Program和DotNet Program的编译运行过程:

.exe资料,DotNet 还是 Native

说明一下,个人觉得右边那个Assembly应该叫DotNet Assemble更合适。而左边那个,一般都直接叫Machine code,很少用Assembly这个说法。


解:

    简单地说,微软把.NET assembly编译成符合 PE 可执行格式的文件,在.NET assembly里面有一小段Native Code用来调用(启动)CLR。也许你会问,那这段Native Code会不会成为这个.NET程序OS Independent 的绊脚石? 答案是不会,因为这一小段Native Code的存在只是为了兼容性的考虑,从WIN XP开始,Windows系统的调度程序就增加了对.NET程序的原生支持:它会自动检测可执行文件中的CLI(Common Language Infrastructure)头,如果有,那调度程序就会自动地调度CLR。 

    我想问题已经说明白了:)对详细细节感兴趣?-> HERE

尾声:

     微软通过这种方式“无缝”地把.NET Framework整合到它自己的操作系统中,但我觉得这有“霸权主义”的味道,而且在一开始害得我理解不能,爬了好些链接才搞明白:(

     附图一张,关于CLI。当然,看wiki是最佳选择

.exe资料,DotNet 还是 Native



热点排行