NET编译时都做了一些什么

原创 2003年06月09日 07:45:00

在新闻组和邮件列表里有大量关于一个.Net程序的设计编译(design-time or
run-time)和运行原理 (CPU-specific binary or pseudo-code)的疑问。

这里是一个简单的回答:当你编译一个C#应用程序或任何一种CLS(Commmon
Language Specification)兼容的语言时,它将首先被编译成一种称为IL
(Intermediate Language)的伪代码(pseudo-code)。在这个应用程序第一次
被运行的时候,这种IL代码将被编译成机器代码,用于执行。也就是说从源代码
到得到运行结果,进行了两次编译。事实上,只有那些被真正使用的函数代码
才会被进行第二次编译。下面揭示开发过程中被隐藏起来的细节:

1) 你用C#开发一些程序
2) 用C#编译器或CLS兼容的编译器编译成EXE
3) 编译器将生成的IL代码和附加信息(manifest)放入拥有一个标准PE头的Win32
可执行文件的只读部分。
4) 编译器在创建这个可执行文件时导入(import)一个名为_CorExeMain的函数。
这个函数是.NET EE(execution engine)--.NET运行期引擎的入口函数。
5) 当执行这个Win32可执行文件时,因为其主要是依赖于DLL的PE文件,操作系
统将会调用位于MSCorEE.DLL中的_CorExeMain函数。
6) 操作系统通过PE文件里的进入点,调用MSCorEE.DLL。并能保证在Windows里
可以有很多程序同时运行。
7) 因为操作系统不能执行.NET IL代码,EXE里的进入点只是简单的中介,它将
指示操作系统调用_CorExeMain函数。
8) 随后_CorExeMain函数开始解释位于PE文件中的IL代码。
9) 因为IL是不能被直接执行的, .NET EE使用称为JITter (Just In Time compiler)
的即时编译器将IL代码编译成本地CPU机器代码用于执行。这一即时编译过程
只在第一次执行的时候进行。

使用.NET命令行编译器编译项目(如ASP.NET、C#等)

如何在命令行下编译一个asp.net项目很多情况你从网上下载了源程序,却苦于本机没装开发环境而不能编译查看,下面我简单说一下解决办法。  源程序最好有.csproj或.vbproj文件,没有的话,要花...
  • wonsoft
  • wonsoft
  • 2009年03月07日 16:05
  • 8665

.Net编译原理简单介绍

首先简单说一下计算机软件运行。所谓软件运行,就是一步一步做一些事情。计算机只认识0和1.给计算机下命令,只能是0与1的方式,确切的说,其实是CPU只认识0和1,因为软件运行是CPU控制的。人直接操作0...
  • sundacheng1989
  • sundacheng1989
  • 2014年03月10日 19:24
  • 4372

.Net编译器Roslyn(一)

在 2014 微软 Build 大会上,Anders Hejlsberg 亲自宣布 .NET 编译平台 Roslyn 开源。 Anders Hejlsberg 是 Turbo Pascal 编译器的...
  • u011127019
  • u011127019
  • 2016年12月15日 16:15
  • 2704

C#之.Net平台和编译原理简介

对于编程而言,本人接触到了C/C++
  • zyq025
  • zyq025
  • 2014年11月20日 12:59
  • 1465

Asp.net 框架解析----生成编译后的文件

1.新建一个网站,第一个请求到达,会编译出一个dll文件,类似这样App_Web_cw4nogpy.dll。文件的位置大约在这里: C:\Users\Administrator\AppData\Lo...
  • qqqgg
  • qqqgg
  • 2017年12月11日 22:28
  • 40

ASP.net 代码保护,发布时编译源码

ASP.net较之以前的asp页面,在安全性方面得带了大大加强,不过如果你不够熟悉其用法,就无法将微软提供的安全性发挥得最佳。大家都知道,ASP.net页面可以通过发布的方式将编译后的页面上传到服务器...
  • wobaiwodedukuku
  • wobaiwodedukuku
  • 2016年12月22日 16:58
  • 1371

.NET编译过程

  • 2014年03月10日 12:33
  • 35KB
  • 下载

.NET编译时都做了一些什么

  • zgqtxwd
  • zgqtxwd
  • 2008年05月01日 03:14
  • 92

编译过程做了哪些事情;

1.编译过程做了哪些事情; 2.字典大致实现原理; 3.block和函数指针的理解; 4.一般开始做一个项目,你的架构是如何思考的? 5.你了解的UIKit结构? 1.编译过程做了哪些事情?1.C++...
  • a787188834
  • a787188834
  • 2017年11月23日 15:22
  • 149

.NET概念:.NET程序编译和运行

程序的编译和运行,总得来说大体是:首先写好的程序是源代码,然后编译器编译为本地机器语言,最后在本地操作系统运行。 下图为传统代码编译运行过程: .NET的编译和运行过程与之类似,首先编写好的源...
  • yysyangyangyangshan
  • yysyangyangyangshan
  • 2012年02月29日 15:46
  • 7315
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:NET编译时都做了一些什么
举报原因:
原因补充:

(最多只允许输入30个字)