栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

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

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

.net framework的组成及跨平台的实现
  • 一、.net framework的组成
  • 二、.net framework的问题
  • 三、.net framework实现跨语言和跨平台
  • 四、.net framework下的跨平台代码复用
    • 2.1 源代码复用
    • 2.2 程序集复用
      • 2.2.1 托管模块与程序集
      • 2.2.2 CLR加载程序集的规则
      • 2.2.3 Retargetable程序集
      • 2.2.4 类型转移
    • 2.3 PCL项目

一、.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解决
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/954203.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号