Beginning.Microsoft.Visual.C.Sharp.2008.翻译(1.1.3-1.1.4)

来源:互联网 发布:没有更新到数据库 编辑:程序博客网 时间:2024/05/01 00:28
 

MSILJIT

当你使用.NET Framework库编译代码的时候,你不必直接创建针对特定操作系统的本地代码。相应的,你的代码将会被编译为Microsoft中间语言(MSIL代码。这样的代码不针对任何操作系统,也不针对C#。其他.NET Framework——比如Visual Basic——同样在第一层被编译成这个语言。当你开发C#应用时,这个编译过程是由VS或者VCE执行的。

 

很显然,更多的工作是在于运行一个应用。这就是即时JIT)编译器的工作了,它把MSIL编译为针对目标OS和机器结构的本地代码。只有基于这点OS才能运行这个应用。这个名称的即时部分反映了这个事实,MSIL代码只在必要的时候被编译。

 

过去,你经常需要把你的代码编译成数种应用,每一种针对特定的操作系统和CPU结构。经常的,这是最佳化的一种形式(举个例子,获取代码以便在AMD芯片上运行得更快),但是有时这种方式饱受批评(举个例子,使应用同时能够在Win9xWinNT/2000环境下工作)。现在这种方式不必要了,因为JIT编译器(如同它们名字所支持的一样)使用MSIL代码,它独立于机器,操作系统和CPU。数种JIT编译器存在于不同的结构中,并且恰当的用于创建所需要的本地代码。

 

这一切的精彩之处就在于它需要在你自己的部分做更少的工作——事实上,你可以把系统忘掉——专注于你代码的细节和更有趣的功能吧。

 

集合

当你编译一个应用时,被创建的MSIL代码被储存在集合里面。集合包括无需其它任何程序你就可以在Windows上直接运行的可执行应用文件(拥有.exe扩展名),和能够被其它应用使用的库(拥有.dll扩展名)。

 

除了包含MSIL外,集合同样包括了信息(一种包含在集合中的信息的描述,也可称为元数据)和可选资源(被MSIL使用的额外数据,比如声音文件和图片)。元信息使得集合完全能够自描述。你不需要其它信息来使用集合,这意味着你可以避免因为向系统注册表添加所需要的信息而失败等等,在其它平台开发时,这通常是一个问题。

 

这意味着部署应用如同在远程计算机上向某个目录拷贝文件一样简单。由于在目标系统上没有额外的被需要的信息,你可以简单地在这个目录执行一个可执行文件(前提是.NET CLR已经被安装),并且就是这样简单。

 

当然,有这种可能你不想让一个运行某个应用所需要的所有东西都被放在同一个地方。你也许编写了一些完成某些任务的代码,而这些任务需要多个应用。类似于这样的情形,把可重用代码放在一个对于所有的应用来说易接受的地方是很有用的。在.NET Framework中,这被叫做全局集合缓存GAC)。将代码放置于GAC中是很简单的事情——你只需把包含代码的集合放置于包含这个缓存的目录下。

 

原创粉丝点击