.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)。
1、.net的组成元素:共同语言执行时期CLR(common language runtime)和基底类别库BCL(base class library)
CLR
1、提供所有.net的程序语言执行程序时的服务。提供所有.net程序的服务及机制都一样,可以执行跨语言呼叫及继承。
2.提供自动内存管理,自动管理程序执行时的内存,自动执行资料收集GC(garbage collection)
3.提供与COM元件互通的能力(旧的COM元件还是可以使用的)
4.内建多执行绪执行能力
BCL:提供开发各种解决方案时所需使用的类库,加速开发解决方案的速度;所有的.net语言皆使用这一组,开发小组可以选择不同的语言共同开发;将不同解决方案的模型一致化。
.net的软件开发过程如下:
组件:
程序是由一个或多个组件(dll)所组成,例如典型的多层式应用程序设计
同样,CLR(MSCOREE.dll)以及BCL(MSCORLB.dll)都是由组件组成的
微软中介语言IL(intermediate language):
所编写的组件不能直接执行,因为它们不是目标代码,而是一种中间代码。
1.由微软定义是CLR的组合语言,没有针对某个作业系统才有的特定指令,必须由即时编译器编译成特定平台的目标代码后才能够执行。
2.所有.net程序语言编译器的目标格式皆为IL,可以执行跨语言呼叫及继承,所以语言不是重点,编译器的能力才是重要的。
3.可放至不同平台,跨平台使用
4.编译成目标代码后的执行,仍然受到CLR的管理
如下图,为微软中介语言的格式(大家并不需要看懂,只是想介绍一下IL是这个样子的)
程序的执行:
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中记录了组件的需求。
这样打开你自己的应用程序(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
详细设置方法,将在后续文章与大家分享。