.Net 框架程序设计(2)

1 程序的执行

        在.Net平台上语言已经不是阻碍我们进行软件开发的绊脚石,目前它已经支持了多种当前流行的开发语言,在不久的将来会有更多的编译器厂家推出针对某种语言的编译器,到时我们可以用我们擅长的语言去开发应用程序。

        作为一个程序员,在编码完成后很少人会去想我们的程序如何运行的。带着这个问题,就我当前能了解到的知识来认识下.Net平台下的程序是如何一步步“走”下去的。

    1)编写源代码

            万里之行始于足下,一切都要从编码开始。.Net平台允许我们用任何面向CLR的编程语言去编写代码,这种便易性大大的提高了多人在同一个项目中使用不同语言进行开发的进度,但要使不同语言编写的类型被另一种语言完全的兼容还要满足CLS的要求,可以在编写代码时打开编译开关让编译器为我们做一下CLS规范检查。

    2)源代码编译成托管模块

             .Net框架的核心是CLR,这个是可以被各种编程语言所使用的运行时,但是它无法直接识别我们的编程语言。所以在我们的程序被CLR托管之前,我们应该把它转化成CLR能识别的东西,这就是在前一篇文章中提到过的CIL。我们可以用任何支持CLR的编程语言来编写源代码,然后用相应的编译器去做语法检查和源代码分析,但最后必须生成一个托管模块。

        每个托管模块都包含IL和元数据,这两者是不可分割的,它们总是同时被嵌入到托管模块中。

     3)托管模块组合成程序集

            CLR并不知道托管模块,它能处理的对象是程序集。程序集是一个或多个托管模块,以及资源文件的逻辑组合。通常在IDE环境中我们生成的是扩展名为DLL和EXE的程序集,IDE自动把托管模块转化成了程序集。当然我们也可以通过一些工具手动的把一个或多个托管模块组合为程序集,程序集只是这些托管模块的逻辑组合,它包含了一个清单的文件,用于描述组成程序集的所有文件。

      4)执行程序集

              以托管EXE为例,在编译器创建这个程序集时,在PE文件的.text部分会嵌入6个字节stub函数: JMP _CorExeMain。在托管EXE的主线程启动时,先去.text部分查看写入的6个字节,从而跳转到_CorExeMain_CorExeMain函数是从MSCorEE.dll动态链接库中导入的,从而导致MSCorEE.dll被加载到该程序的地址空间。_CorExeMain函数接着初始化CLR,并查看可执行程序集的CLR表头确定要执行的托管入口点方法,入口点找到后,其IL代码随之被编译成本地CPU执行,我们的托管应用程序开始真正开始执行。

2  部署程序集

           在了解了程序集如何运行后,现在应该是发布我们的程序集的时候了,只有这样用户才能运行我们的程序。部署我们的程序集有两种方式:一种是私有部署;一种是公有部署。

       1)私有部署

                  我们把和应用程序部署在同一个目录下的程序集称为私有部署程序集,这种程序集不会为其他任何程序共享。在发布我们的程序集的时候,只要将它们复制到一个应用程序的目录下,CLR就能加载并运行它们。私有的程序集作为应用程序的一部分,应保证在应用程序范围内是唯一的。

       2)公有部署

                 和私有部署相对,公有部署程序集会放置在一个所有托管应用程序都知道并可以访问的地方,这种程序集需要发布者的公钥/私钥对签名,这个秘钥对可以唯一的标示程序集的发布者。

        3)强命名程序集

            我们把这种经过了发布者的公钥/私钥对签名的程序集称为强命名程序集。签名的程序集和未签名的程序集都可以进行私有部署,但是只有经过签名的程序集才可以进行公有部署。因为有很多公司他们发布的程序集可能具有相同的名称,为了区别它们,一个强命名的程序集应该包含一组能唯一标识自己的特性,这些特性是:文件名、版本号、语言文化标识和一个公有秘钥标记。   

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值