.NET Framework的一些基本概念
- 各种Framework的区别(按在Windows程序管理中显示的名称)
- .NET Framework: 运行环境,仅用于运行程序
- .NET Framework Developer Pack: 包含Runtime、SDK(装vs时不会安装上,平时开发用Targeting Pack就行)、Targeting Pack。开发组件包,包括了微软提供的.NET 语言编译器(如C#编译器CSC.exe和VB.NET编译器VBC.exe),完整的.NET Framework文档,以及各种工具(如AL.exe和SN.exe等)
- .NET Framework Targeting Pack: visual studio使用的,用于编译等开发工作,没有的话vs中不能选择该版本framework
- https://www.microsoft.com/en-us/download/details.aspx?id=48136
- The .NET Framework 4.6 Targeting Pack is a package that enables developers to build applications targeting the .NET Framework 4.6 using either Visual Studio 2013, Visual Studio 2012 or third party IDEs. You need to download and install the .NET Framework 4.6 prior to installing the targeting pack.
- .NET Framework Targeting Pack (ENU)
- CLR,公共语言运行时(Common Language Runtime)
- 无论通过任何语言构建产品,都必须寄宿到一个平台中运行,这正如我们的软件运行在操作系统环境一样,操作系统为CLR提供了运行环境,使用.NET构建的程序又运行在CLR之上,CLR为.NET程序的运行提供了温床,CLR提供基本的类库和运行引擎,基本类库封装操作系统函数供开发者方便调用,运行引擎用于编译并运行我们开发的程序。CLR包含.NET运行引擎和符合CLI的类库。通过.NET平台构建的程序都基于CLR基础类库来实现,并且运行在CLR提供的运行引擎之上。
- 编译为托管代码时,编译器将源代码翻译为 Microsoft 中间语言 (MSIL),这是一组可以有效地转换为本机代码且独立于 CPU 的指令。MSIL 包括用于加载、存储和初始化对象以及对对象调用方法的指令,还包括用于算术和逻辑运算、控制流、直接内存访问、异常处理和其他操作的指令。要使代码可运行,必须先将 MSIL 转换为特定于 CPU 的代码,这通常是通过实时 (JIT) 编译器来完成的。由于公共语言运行库为它支持的每种计算机结构都提供了一种或多种 JIT 编译器,因此同一组 MSIL 可以在所支持的任何结构上 JIT 编译和运行。
- CLI,公共语言基础架构(Common Language Infrastructure)
- CLI是一个开放的技术规范。它是由微软联合惠普以及英特尔于2000年向ECMA倡议的。通用语言基础架构定义了构成.NET Framework基础结构的可执行码以及代码的运行时环境的规范,它定义了一个语言无关的跨体系结构的运行环境,这使得开发者可以用规范内定义的各种高级语言来开发软件,并且无需修正即可将软件运行在不同的计算机体系结构上。CLI有时候会和CLR混用。但严格意义上说,这是错误的。因为CLI是一种规范,而CLR则是对这种规范的一个实现。
- 欧洲计算机制造商协会(ECMA)已经于2001年10月13日批准C#语言规范(ECMA-334)成为一种新诞生的计算机产业标准。同时国际标准组织ISO也同意该标准进入该组织的审批阶段。并且,作为.NET与CLR的核心部分,CLI与C#也同时获得了ECMA的批准(ECMA-335)。拥有了C#与CLI这两项标准,你可以自己写出能够运行于任何操作系统上的.NET平台(只要你愿意)。如前所述,著名的MONO项目就是这么干的,MONO项目包括三个核心的部分:一个C#语言的编译器,一个CLI和一个类库。
CIL,公共中间语言(Common Intermediate Language),简称微软中间语言(MSIL)或者中间语言(IL)。
CIL是编译器将.NET代码编译成公共语言运行时(CLR)能够识别的中间代码。它是一种介于高级语言(例如C#)和CPU指令之间的一种语言。当用户编译一个.NET程序时,编译器(例如VisualStudio)将C#源代码编译转换成中间语言 (MSIL),它是一种能够被CLR转换成CPU指令的中间语言,当执行这些中间语言时,CLR提供的实时(JIT)编译器将它们转化为CPU特定的代码。由于公共语言运行库支持多种实时编译器,因此同一段中间语言代码可以被不同的编译器实时编译并运行在不同的CPU结构上。从理论上来说,MSIL将消除多年以来业界中不同语言之间的纷争。在.NET的世界中可能出现下面的情况一部分代码可以用C++实现,另一部分代码使用C#或VB.NET完成的,但是最后这些代码都将被转换为中间语言。这给程序员提供了极大的灵活性,程序员可以选择自己熟悉的语言,并且再也不用为学习不断推出的新语言而烦恼了。
- CTS,通用类型系统(Common Type System)
- CTS是一种类型系统和语言规范,它能够确保CLR能够识别和处理的类型,所有.NET开发语言中的类型,无论时VS.NET类型还是C#.NET类型最终都会被编译成CLR能够识别的CTS类型,因此CTS是.NET平台类型的抽象。例如VB.NET中的integer类型和C#中的int类型都编译成CTS的System.Int32类型。如果某种语言编写的程序能够在CLR上运行,并不能说明这种语言完全符合CTS的规范。例如使用C++编写的代码,部分代码并不符合CTS规范,在编译时把这部分不符合CTS的代码会被编译成原始代码本地CPU指令而非中间代码。
- CLS,公共语言规范(Common Language Specification)
- CLS是CTS的一个子集,所有.NET语言都应该遵循此规则才能创建与其他语言可互操作的应用程序,但要注意的是为了使各语言可以互操作,只能使用CLS所列出的功能对象,这些功能统称为与CLS兼容的功能,它是在.NET平台上运行语言的最小规范,正因为.NET上不同语言能够轻松交互一样,例如C#编写程序时可以直接引用并使用VB.NET编写的类库。为了达到这样的交互,才制定出CLS规范,在.NET框架本身提供的所有类库(并非所有)都是与CLS兼容的,在查看MSDN文档时,不兼容的类和方法都被特别标记为不兼容,例如C#中的System.UInt32就标记为”此API不兼容CLS。兼容 CLS的替代API为 Int64。“,这说明并不是所有的语言(例如VB.NET或J#)都支持无符号的数据类型,但这种数据类型与CLS不兼容的。

- BCL,基础类库(Base Class Library)
- BCL是一个公共编程框架,称为基类库,所有语言的开发者都能利用它。是CLI(Common Language Infrastructure,公共语言基础结构)的规范之一,主要包括:执行网络操作,执行I/O操作,安全管理,文本操作,数据库操作,XML操作,与事件日志交互,跟踪和一些诊断操作,使用非托管代码,创建与调用动态代码等,粒度相对较小,为所有框架提供基础支持。
- FCL,框架类库(Framework Class Library)
- FCL提供了大粒度的编程框架,它是针对不同应用设计的框架 ,FCL大部分实现都引用了BCL,例如我们常说的开发框架:ASP.NET、MVC、WCF和WPF等等,提供了针对不同层面的编程框架 。
.NET Framework的一些基本概念的更多相关文章
- Play Framework介绍:主要概念(转)
Play Framework是一个Rails风格的Full-stack Java Web框架. MVC模型 Play应用遵循Web架构使用的MVC架构模式. 它将应用分离到不同的层中:表现层(Pres ...
- [.NET Framework学习笔记]一些概念
CIL:Common Intermediate Language 公共中间语言 VB.NET 和 C#.NET 编译以后都生成相同的中间语言,程序集就是由CIL组成的,CIL代码也叫做托管代码,因为C ...
- OAF_OAF Framework页面分析(概念)
20150506 Created By BaoXinjian
- OAF_Oracle Application Framework基本知识点(概念)
2014-02-06 Created By BaoXinjian
- .NET Core 和 .NET Framework 之间的关系
引用一段描述:Understanding the relationship between .NET Core and the .NET Framework. .NET Core and the .N ...
- 浅谈Entity Framework中的数据加载方式
如果你还没有接触过或者根本不了解什么是Entity Framework,那么请看这里http://www.entityframeworktutorial.net/EntityFramework-Arc ...
- 通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?
什么是.NET?什么是.NET Framework?本文将从上往下,循序渐进的介绍一系列相关.NET的概念,先从类型系统开始讲起,我将通过跨语言操作这个例子来逐渐引入一系列.NET的相关概念,这主要包 ...
- 【转载】通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?
本文转载自:http://www.cnblogs.com/1996V/p/9037603.html [尊重作者原创,转载说明出处!感谢作者“小曾看世界”分享! ] 什么是.NET?什么是.NET Fr ...
- NET?.NET Framework?.NET Core?
什么是.NET?什么是.NET Framework?什么是.NET Core? https://www.cnblogs.com/1996V/p/9037603.html 什么是.NET?什么是.NET ...
随机推荐
- 第一章 初识MySQL(待续)
···········
- Hadoop编码解码【压缩解压缩】机制详解(1)
想想一下,当你需要处理500TB的数据的时候,你最先要做的是存储下来.你是选择源文件存储呢?还是处理压缩再存储?很显然,压缩编码处理是必须的.一段刚刚捕获的60分钟原始视屏可能达到2G,经过压缩处理可 ...
- 【291】Python 中字符串添加到剪贴板
参考:如何使用Python将字符串复制到Windows上的剪贴板上? 实现代码如下: from Tkinter import Tk r = Tk() r.withdraw() r.clipboard_ ...
- Theos初步
[Theos初步] 1.安装Theos.Theos需要在mac和ios上均安装,ios上安装的是Theos服务器,以使得mac的thoes可以直接安装app到ios设备上.如果不需要使用此功能,则仅安 ...
- svn之merge
[svn之merge] 1. merge SOURCE[@REV] [TARGET_WCPATH] (the 'sync' merge) This form is called a 'sync' ( ...
- java基础之io流总结四:字符流读写
字符流读写只适用于字符文件. 基本字符流(转换流)读写文件 转换流本身是字符流,但是实例化的时候传进去的是一个字节流,所以叫做转换流 InputStreamReader isr = new Input ...
- 【FZU 2277】Change
题意 有一颗有n个节点的有根树,根节点编号时1,每个结点都有一个值ai,开始的时候,所有节点的值都是0. 我们有q个操作,操作只有两种类型 1 v x k,a[v]+=x,a[v']+=x-k,a[v ...
- array_splice()函数 ,删除数组中的某个值
array_splice() 这个函数是真的皮,有好多种方法,但是最后还是在PHP官方的文档找到了合理的解释的用法 花了大概半个小时 $arr = array('a','b','c','d'); ar ...
- 代码查看import的类是出自哪个jar包的方法(转)
import java.security.ProtectionDomain; import java.security.CodeSource; public static void main(Stri ...
- 【总结整理】webGIS学习thinkGIS(四)WebGIS中通过行列号来换算出多种瓦片的URL 之离线地
http://www.thinkgis.cn/topic/541a5319da8db186fd06e097 1.前言 在前面我花了两个篇幅来讲解行列号的获取,也解释了为什么要获取行列号.在这一章,我将 ...