最近赶项目忽然想到一个问题,那就是在 .Net平台下的C#代码是怎么从源代码到机器可以识别的电脑的(只怪自己上学不好好读书,现在又要重补一遍了!!!)

话不多说直接上调研结果:

预习知识:

1: IL 是微软.NET平台上衍生出的一门中间语言,.NET平台上的各种高级语言(如C#,VB,F#)的编译器会将各自的代码转化为IL。

2: CLR是一个可以由多编程语言使用的运行时,CLR的核心功能:内存管理,程序集加载,安全性,异常处理,线程同步等等。可以被很多属于微软系列的开发语言使用。

结果:

.net framework的核心是其运行库执行环境,成为公共语言运行库(CLR)或.net运行库。通常将在CLR控制下运行的代码称为托管代码(managed code)。CLR执行编写好的源代码之前需要编译他们。.net中编译分为两个阶段:

(1)把源代码编译为Microsoft中间语言(IL).
           (2)CLR把IL编译为平台专用的代码。

第一次编译很慢(通过各自的编译器)(由源代码---->>中间代码IL),第二次编译很快(通过CLR)(由中间代码---->>机器代码)

版权声明:本文为博主原创文章,如需转载,请标明出处。

.net平台下对C#代码的编译的更多相关文章

  1. windows平台下VLC2.0.5编译

    windows平台下VLC2.0.5编译说明 时隔一年多,又要搞流媒体了,不过这次是要做流媒体服务器. 暂时决定使用vlc+ffmpeg+live555,虽然听有些前辈说这个组合的性能较差,只能作为学 ...

  2. .net平台下socket异步通讯(代码实例)

    你应该知道的.net平台下socket异步通讯(代码实例) 1,首先添加两个windows窗体项目,一个作为服务端server,一个作为客户端Client 2,然后添加服务端代码,添加命名空间,界面上 ...

  3. 在window平台下,自己DIY编译OpenSSL,Libcurl ,来支持HTTPS传输协议

    1 缘起 原来就了解些libcurl,一直没有机会在项目实际使用libcurl.   恰好最近一个云存储的项目,服务器使用openstack 恰好我负责现在的一个云存储SDK c++版本的开发中. 与 ...

  4. [转]Windows平台下Makefile学习笔记

    Windows平台下Makefile学习笔记(一) 作者:朱金灿 来源:http://blog.csdn.net/clever101 决心学习Makefile,一方面是为了解决编译开源代码时需要跨编译 ...

  5. Android平台下OpenCV移植与使用---基于C/C++

    在<Android Studio增加NDK代码编译支持--Mac环境>和<Mac平台下Opencv开发环境搭建>两篇文章中,介绍了如何使用NDK环境和Opencv环境搭建与测试 ...

  6. .NET平台下,关于数据持久层框架

    在.NET平台下,关于数据持久层框架非常多,本文主要对如下几种做简要的介绍并推荐一些学习的资源: 1.NHibernate 2.NBear 3.Castle ActiveRecord 4.iBATIS ...

  7. Dotnet全平台下APM-Trace探索

    背景 随着支撑的内部业务系统越来越多,向着服务化架构进化,在整个迭代过程中,会逐渐暴露出以下问题. 传统依赖于应用服务器日志等手段的排除故障原因的复杂度越来越高,传统的监控服务已经无法满足需求. 终端 ...

  8. BEA WebLogic平台下J2EE调优攻略--转载

    BEA WebLogic平台下J2EE调优攻略   2008-06-25 作者:周海根 出处:网络   前 言 随着近来J2EE软件广泛地应用于各行各业,系统调优也越来越引起软件开发者和应用服务器提供 ...

  9. Windows平台下Qt QOpenGL中glutSolidSphere()方法未定义的解决方法

    Windows平台下Qt中glut库的使用     用Qt中的QGLWidget窗体类中是不包括glut工具库的,难怪在myGLWidget(在我的程序中是QGLWidget的派生类)中绘制实心球体是 ...

随机推荐

  1. 面向对象(四)--绑定方法与非绑定方法(classmethod、staticmethod装饰器)

    一.绑定方法与非绑定方法 1.绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入): (1)绑定给对象的方法:在类内部定义的函数(没有被任何装饰器修饰的)默认就是绑定给对象用的. (2)绑定 ...

  2. Linux文件服务管理之nfs

    NFS(Network File System)即网络文件系统, 是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源. 在NFS的应用中,本地NFS的客户端应 ...

  3. centos 查看硬盘情况

    lsblk                                                                             查看分区和磁盘 df -h     ...

  4. 【JSTL】JSTL标签库的常用标签

    一.JSTL技术 1.JSTL概述 JSTL(JSP Standard Tag Library),JSP标准标签库,可以嵌入在jsp页面中使用标签的形式完成业务逻辑等功能.jstl出现的目的同el一样 ...

  5. 数据库系统概论(新技术篇)--中国人民大学【第13讲】KEY-VALUE数据库(键值对数据库)

    市面上主流的分布式文件系统(FS): (Hadoop的)HDFS,(Google的)GFS     详见ppt   1.数据服务与键值对数据库: 数据服务:data serving数据服务:数据的简单 ...

  6. 四步理解GloVe!(附代码实现)

    1. 说说GloVe 正如GloVe论文的标题而言,GloVe的全称叫Global Vectors for Word Representation,它是一个基于全局词频统计(count-based & ...

  7. MySql数据库中的datediff函数

    MySql数据库中的datediff函数:主要是用来返回两个日期之间相隔的天数   一半情况下是大日期在前,小日期在后的 这样写也是能够运行的 要注意查询结果:

  8. ES6学习笔记 -- 尾调用优化

    什么是尾调用? 尾调用(Tail Call)是函数式编程的一个重要概念,就是指某个函数的最后一步是调用另一个函数. function f(x) { return g(x) } 如上,函数 f 的最后一 ...

  9. [Python] 递归返回值 为 None 的问题

    递归返回值 为 None 的问题 解决办法: 在递归调用下一个 递归 函数前面,一定要加上 return,否则就会返回 None 如红色 所处的return: def getAllCityUrl(ur ...

  10. [题解向] Luogu4092 [HEOI2016/TJOI2016]树

    #\(\mathcal{\color{red}{Description}}\) \(Link\) 给定一棵以\(1\)为根的树,有两种操作: \(C: \ \ x\)给点\(x\)打上花标记. \(Q ...