一、什么是.net framework

.net framework是Microsoft为开发应用程序而创建的一个富有革命性的平台

1.跨平台性,可以运行在多个操作系统上

2..net.framework不限制应用程序的类型,可以创建windows应用程序、web应用程序、web服务和其它各种类型的应用程序。

3..net framework可以使用多种语言开发,如C#、VB.net、C++、Jscript等

做为微软首席执行官的鲍尔默说:Microsfot.net代表了一个集合、一个环境、一个可以做为平台支持下一代internet的可编程结构。

就像JAVA,JAVA有一个叫做JVM(java virtual machine)。

net framework 架构 .net framework的组成_.net

二、受管理的程序执行(Managed Execution)

1、.net的组成元素:共同语言执行时期CLR(common language runtime)和基底类别库BCL(base class library)

net framework 架构 .net framework的组成_CLR_02

 

CLR

1、提供所有.net的程序语言执行程序时的服务。提供所有.net程序的服务及机制都一样,可以执行跨语言呼叫及继承。

2.提供自动内存管理,自动管理程序执行时的内存,自动执行资料收集GC(garbage collection)

3.提供与COM元件互通的能力(旧的COM元件还是可以使用的)

4.内建多执行绪执行能力

net framework 架构 .net framework的组成_.net_03

BCL:提供开发各种解决方案时所需使用的类库,加速开发解决方案的速度;所有的.net语言皆使用这一组,开发小组可以选择不同的语言共同开发;将不同解决方案的模型一致化。

net framework 架构 .net framework的组成_CLR_04

 

.net的软件开发过程如下:

net framework 架构 .net framework的组成_CLR_05

三、以组件为基础的设计

组件:

程序是由一个或多个组件(dll)所组成,例如典型的多层式应用程序设计

net framework 架构 .net framework的组成_CLR_06

同样,CLR(MSCOREE.dll)以及BCL(MSCORLB.dll)都是由组件组成的

微软中介语言IL(intermediate language):

所编写的组件不能直接执行,因为它们不是目标代码,而是一种中间代码。

1.由微软定义是CLR的组合语言,没有针对某个作业系统才有的特定指令,必须由即时编译器编译成特定平台的目标代码后才能够执行。

2.所有.net程序语言编译器的目标格式皆为IL,可以执行跨语言呼叫及继承,所以语言不是重点,编译器的能力才是重要的。

3.可放至不同平台,跨平台使用

4.编译成目标代码后的执行,仍然受到CLR的管理

如下图,为微软中介语言的格式(大家并不需要看懂,只是想介绍一下IL是这个样子的)

net framework 架构 .net framework的组成_CLR_07

四、程序的部署

程序的执行:

1.回复到以往的老方式搜索,使用像DOS的方式搜索文件,.net使用路径来搜索文件

2.可以指定程序执行时使用的组件版本

3.可以设定配置文件config(类似.ini)指定组件位置

4..net不使用Registry,故不会有DLL Hell的问题

组件的搜索规则:

1..net先判断所需要使用的组件版本

2.搜索组件共用快取(GAC),在C/windows下

3.如果没有找到,不过有配置文件存在,则搜索配置文件所指定的位置

4.如果还没有找到的话,会搜索执行文件所在的目录

5.如果还没有找到的话,程序会发生错误并终止执行。

GAC是什么?:

Goobal Assembly Cache,这也是基底类别库所在的位置。所有该机器上的.net程序都可以使用,有一些组件是native组件(经由JIT(即时编译器)预先编译好),多个不同版本的组件可以同时存在,并肩执行,可以验证组件是否被篡改。

.net是如何知道组件的版本等信息的呢?:

观察可执行程序的内部,即可获得许多组件的信息,使用工具程序:ILDASM(intermediate language disassembler可以观察组件内部的信息,manifest中记录了组件的需求。

运行命令提示符:ILDASM

net framework 架构 .net framework的组成_.net_08

这样打开你自己的应用程序(EXE)就可看到相关组件的版本信息(如图),在manifest下面,打开可以看到中间代码。

manifest:

manifest包含了对组件的参考、名称版本等信息。

manifest并不包含组件的源代码、registry的信息(不再需要GUID)、组件所存放的路径资料(.net使用路径搜索机制)

关于如何参考组件,大家可查阅相关的资料。

五、布署的选择

1、组件可以和.EXE存放在相同的的文件夹下,最简单的布署方式,称为XCOPY Deployment

2.将一些安装在和.EXE相同的资料夹下,一些安装在GAC中。这样做的好处:GAC可以让您在不同的应用程序间共用一个组件;GAC可以让您同时存放不同的版本

3.透过.config布署,可以让您自定义组件的位置

4.零接触布署

用户透过URL进行安装,例如:http://server/app/app.exe

详细设置方法,将在后续文章与大家分享。