.net框架程序设计读书笔记二(Microsoft .net 框架开发平台体系架构)

原创 2004年05月31日 16:57:00

第一章:Microsoft .net 框架开发平台体系架构<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

   本章的目标:对.net框架体系架构有一个总体的认识,并对.net框架中出现的一些新的技术和术语有一个基本的了解。

 

1.1 将源代码编译为托管模块

   关于编程语言的选择

   .net框架的核心是通用语言运行时,顾名思义它是一个可被各种不同的编程语言所使用的运行时。CLR的很多特性可用于所有面向它的编程语言,如果CLR用异常来报告错误,那么所有面向它的语言都将通过异常来得到错误报告。如果CLR允许我们创建线程,那么所有面向它的语言也都可以创建线程。

实际上CLR在运行时对开发人员用何种编程语言来完成源代码一无所知。这意味着我们应该选择那些能够最容易表达我们意图的编程语言。我们可以用任何自己喜欢的语言(面向CLR的)来编写代码。

不同的编程语言允许我们使用不同的语法进行开发,不同的语法对于我们解决各种问题的难易程度是有影响的,例如:对于数学或者金融应用,彩用APL语法更快。

 

微软已经创建了以下几种面向CLR的编译器

    托管扩展C++

    C#

    Visual Basic

    Jscript

    J#

    IL汇编器

 

  我们可以用任何支持CLR的编程语言来创建源代码文件。然后用相应的编译器来做语法检查和源代码分析。最后生成托管橡块。

 

托管模块

 

   托管模块是一个需要CLR才能执行的标准Windows可移植可执行(Portable executable,简称PE)文件。

 

托管模块的组成部分:

l         PE表头

标准Windows PE文件表头,类似于通用对像文件格式表头。该表头指出了文件的类型:GUI(图形用户界面)CUI(控制台用户界面),或者DLL. 此处的DLl并非我们理解的传统的windows 动态链接库文件,虽然都叫DLL,但,net平台中的DLL指程序集文件的一种形式),该表头还包含文件创建时间。对于包含CPU代码的模块,该表头还会包含有关本地CPU代码的一些信息

 

l         CLR表头

  包含标识托管模块的一些信息(可以被CLR或者一些实用工具解析)。

1、   CLR版本号

2、   托管模块入口点方法(Main方法)的元数据标记

3、   托管模块的元数据标记

4、   资源

5、   强命名

6、  其他一些意义不是太大的信息的位置和尺寸

 

l         元数据

每个托管模块都包含有一些元数据表。元数据表主要分两种,一种用于描述源代码中定义的类型和成员,一种用于描述源代码中的引用类型和成员。

 

l         中间语言(IL)和代码

 编译器在编译源代码是产生的指令。CLR在运行时会将IL代码编译成本地CPU指令

 

元数据(metadata就是一个数据表的集合,在这些表中,其中一些用于描述托管模块中所定义的内容(比如所定义的类型和它们的成员,另外一些用于描述托管模块中引用的内容(比如被引用的类型和它们的成员)。元数据总是和包含IL代码的的文件相关联。

 

元数据的用处:

1、   省去了源代码编译时对头文件和库文件的需求,

2、   Visual Studio .Net可以利用元数据来辅助我们编写代码。智能感知就是这样做的。

3、   可以序列化和反序列化

4、   垃圾收集器可以追踪对像的生存期。

 

 

1.2 将托管模块组合为程序集

CLR实际上并不和托管模块打交道,它直接打交道的对象是程序集assembly.程序集是一个抽象的概念,刚开始往往很难理解。首先,程序集是一个或多个托管模块,以及一些资源文件的逻辑组合。其次,程序集是组件复用,以及实施安全策略和版本的最小单位。根据我们对编译器和相关工具所做的选择,程序集可以是一个文件或者多个文件。

默认情况下,编译器会将产生的托管模块转换为一个程序集。也就是说,c#编译器产生的是一个我包含了清单的托管模。其中的清单表明程序集中仅包含一个文件。对于仅包含一个托管模块,并且没有资源(或者数据)文件的项目来说,程序集就是托管模块,而且在创建过程中,不需要执行任何其他的步骤。

程序集中的模块还包含它所引用的程序集的一些信息(如版本号信息)。这些信息使得一个程序集得以实现自描述(self-describing)。换句话说,CLR知道执行一个程序集所需要的所有内容,它不需要再在注册表或者活动目录中获取额外的信息。因此,程序集的部署要比非托管组件的部署容易得多。

1.3加载通用语言运行时

一个程序集或者是一个可执行应用程序,或者是一个包含供可执行应用程序使用的一组类型(组件)的DLLCLR负责管理包含在程序集中的代码的执行。这意味着宿主机器必须安装.net框架。微软已经创建了一个可以将.net框架免费安装到客户机上的分发包。.net框架最终会和将来的Windows打包在一起,这样我们就不需要将它和我们的程序集放在一起来发布了。

我们可以通过在%windir%/system32目录下查找MSCorEE.dll文件来判断一个机器中是否安装了.NET框架。如果想确定一个机器中安装了哪些版本的.NET框架,可以查看下面的注册表键的子键:

HKEY_LOCAL_MACHINE / SOFTWARE / Microsoft / .NETFramework  / policy

 

当生成一个EXE程序集时,编译器/链接器会产生一些特殊的信息,并将它们嵌入到结果程序集的PE文件表头及其各个组成文件的.text部分。当EXE文件被调用时,这些特殊的信息将导致CLR被加载并初始化。CLR随后会定位至应胜程序的入口点方法,从面以此来启动应用程序。

 

类似地,如果是一个非托管应用程序通过调用LoadLibrary来加载一个托管程序集,那么该托管程序集DLL的入口点函数也会知道去加载CLR来处理包含在其中的代码。

 

托管EXE加载并初始化CLR的过程

1.          MSCorEE检查CLR表头以获得Main方法的元数据标记。

2.          MSCorEE 检查Main方法的元数据以获得其IL在托管EXE中的位置。

3.          MSCorEE Main方法的IL编译成本地CPU指令。

4.          MSCorEE跳转到Main方法编译后的本地CPU指令上(使用主线程)

5.          应用程序开始运行。

  

   托管DLL的情形与此类似。

.NET框架设计 模式、配置、工具 完整版 pdf

  • 2016年06月08日 08:53
  • 35.86MB
  • 下载

终于把Microsoft .NET框架程序设计(修订版)看完了

这本书是由windows & .Net专家Jeffrey Richter写的,现在最新的是第二版CLR Via C#。虽然内容差不了多少,不过俺还是买了。:D。此书由李建忠老师翻译的。   Jeff...
  • kisserLeon
  • kisserLeon
  • 2006年11月28日 19:09
  • 1861

第一部分 Microsoft.NET框架基本原理3----读《Microsoft.NET框架程序设计》

    使用延迟签名技巧来开发程序集所做的讨论:    1.当开发程序集时,首先取得仅包含公司公有密钥的文件,并将下面两个特性加到源代码中:    [assembly:AssemblyKeyFile(...
  • orichisonic
  • orichisonic
  • 2007年07月02日 15:08
  • 559

Microsoft .NET框架程序设计.pdf_中文清晰版

  • 2014年01月06日 19:51
  • 40.72MB
  • 下载

Microsoft.NET框架程序设计(修订版)-中文版.pdf (清晰版)

  • 2014年01月21日 20:55
  • 37.66MB
  • 下载

.NET框架程序设计——体系结构

谈到.NET,相信对于大多数初学者而言,都会感觉比较乱、比较迷茫,什么ASP.NET、VB.NET、VC.NET、ADO.NET、.NETFramework 等等概念,搞的我们晕头转向的,他们之间到底...
  • dongyue786
  • dongyue786
  • 2014年10月15日 15:47
  • 1980

.NET平台常用的框架整理

从学习.NET以来,优雅的编程风格,极度简单的可扩展性,足够强大开发工具,极小的学习曲线,让我对这个平台产生了浓厚的兴趣,在工作和学习中也积累了一些开源的组件,就目前想到的先整理于此,如果再想到,就继...
  • moonpure
  • moonpure
  • 2016年07月28日 15:57
  • 9279

.NET框架-微软C#编程风格官方指南

.NET C# 15 rules for coding style
  • daigualu
  • daigualu
  • 2017年03月13日 08:54
  • 1172

Microsoft .net框架程序设计(修订版)清晰版

  • 2012年12月26日 15:50
  • 37.79MB
  • 下载

Microsoft .NET框架程序设计(修订版)

  • 2011年12月01日 10:25
  • 20.21MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:.net框架程序设计读书笔记二(Microsoft .net 框架开发平台体系架构)
举报原因:
原因补充:

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