.net framework的组成及跨平台的实现

一、.net framework的组成

  • .net framework由以下两部分构成
    • common language runtime(CLR)
      • 公共语言的运行环境,相当于java中的虚拟机
      • 为托管程序提供执行环境,内存管理、垃圾回收等
    • framework class library(FCL)
      • 由以下两部分构成
        • basic class library(BCL)
          • 基础类库
          • 作为一个不可分割的整体,为所有WPF、WCF、Windows Forms、Asp.net等框架提供基础类型
        • AppModel
          • ASP.NET、Windows Forms等

在这里插入图片描述

二、.net framework的问题

  • 同一设备平台下BCL大而全
    • BCL需要为所有托管程序提供基础功能的支持
    • 不可分割
      • 核心功能都在一个程序集中,必须全部加载进内存,即使很多功能用不上
  • 不同设备平台下BCL各自独立
    • 不同设备平台,.net framework不光在AppModel层有差异,在BCL和CLR层面也有差异

三、.net framework实现跨语言和跨平台

  • Common Language Infrastructure(CLI)
    • Common Language
      • 解决各种开发语言的兼容性
      • 方式:为每种高级开发语言配备一个编译器,将其编译成中间语言
    • Infrastructure
      • 运行时环境
      • 弥补不同设备平台之间执行方式的差异
      • 方式:为每个设备平台配备一个虚拟机,通过即时编译,将中间语言编译为适用于设备平台的机器语言

在这里插入图片描述
在这里插入图片描述

四、.net framework下的跨平台代码复用

2.1 源代码复用

  • 文件链接
    • 文件在同一物理位置,被不同的项目所引用

2.2 程序集复用

2.2.1 托管模块与程序集

  • 托管模块
    • 一种编程语言编译后生成,包括IL代码和元数据
  • 程序集
    • 多个托管模块构成
    • 清单文件包含在某个托管模块中,能够标识出程序集中包含的资源以及引用的外部程序集
    • 清单文件中记载的外部程序集是编译时引用的程序集

2.2.2 CLR加载程序集的规则

  • 清单文件中记载的外部程序集是CLR加载程序集的依据
    • 编译时引用强签名程序集
      • CLR需要加载与清单文件记载的文件名、版本号、公钥令牌相同的程序集,否则报错
    • 编译时引用未签名程序集
      • CLR需要加载与清单文件记载的文件名、版本号相同的程序集
      • 例外,编译时引用了低版本.net framework的基础程序集,可以直接在高版本的CLR中运行
  • 类型转移
    • API在低版本的.net framework中定义在某个程序集中,在高版本的.net framework又定义在另一个程序集中
    • 高版本的.net framework为了向后兼容,会保留原来的空壳,并重定向到新的位置,即类型转移特性

2.2.3 Retargetable程序集

  • 编译时引用强签名程序集,要求运行时程序集的文件名、版本号、公钥令牌相同
  • 使用Retargetable标记后,强签名程序集的匹配规则会变为只匹配文件名
    • 编译时引用Retargetable标记的程序集
  • 但是只适用于.net framework提供的基础程序集

2.2.4 类型转移

  • API在低版本的程序集中定义在某个程序集中,在高版本的程序集又定义在另一个程序集中
  • 使用类型转移特性标记后,可以在高版本的程序集中保留原来的空壳,并重定向到新的位置,实现向后兼容

2.3 PCL项目

  • 依据
    • 不同平台框架的API存在交集,建立在交集之上的程序集可以运行在这些平台之中

在这里插入图片描述

  • 微软枚举了各种平台框架排列组合的情况,生成了对应的Profile,在创建PCL项目之前,只要选择对应的Profile,就能实现有限的跨平台能力
  • 所有的Profile都是Retargetable程序集
  • 编译与运行时环境的不一致,可以通过Retargetable和类型转移解决
  • 跨平台可以通过Profile解决
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值