(转).Net基础体系和跨框架开发普及

在园子里看到了一篇关于.net体系及框架开发的文章,感触颇深,身为一个.net程序员,发现自己在这方面的跟进和理解远远不够。转到自己这里,分享的同时方便日后查看。

原文链接: http://www.cnblogs.com/sunhoy/p/6371178.html

基础概念

  .Net 本身是一个通用开发平台,我个人的理解主要分位如下两个层面:1. 语言层面,2. 运行时

  首先:在语言层面上

  面向 .net 平台的顶层开发语言有很多,常见的如:C#,F#和Visual Basic等,.net框架提供了这些语言使用的公共语言运行时,运行时与具体的语言无关,它定义了这些语言的公共规范,像类型系统,文件格式等。

  这些高级语言编写的代码被称为托管代码,这些代码需要通过编译器编译为中间代码(IL),然后由公共语言运行时(CLR)接管,再经过JIT编译为机器代码交给cpu运行。

  公共语言运行时自动处理对象布局并管理对象引用,当不再使用对象时释放它们。 按这种方式实现生存期管理的对象称为托管数据。 垃圾回收消除了内存泄漏以及其他一些常见的编程错误。

  其次:运行时层面

  当前.net的运行时主要有.Net Framework, Mono for Xamarin和.Net Core 。这些运行时在不同是时期主要是为了解决当时所面临的问题衍生而出,这里介绍下他们相互的关联和职责。

  1. .Net Framework ,这个是自2002年就已存在的.Net运行时,也是现在开发人员还在经常使用的框架。涵盖了桌面,web等应用,同时包含了一些特定于windows的api,不过其只能运行在windows平台的限制,给对跨系统平台要求较高的开发需求造成很大的困难,非常适合用于桌面应用的开发。

  2. Mono for Xamarin ,这个是当时为了实现.net 的跨系统运行,在2004年非官方组织发布的一个.Net运行时,当时主要是能够支持在.net framework下编写的代码在linux等系统下运行,当前主要包含适用于 iOS、Android、Xamarin.Forms 和 Xamarin.Mac 的 API。 Mono for Xamarin 非常适合生成 iOS 和 Android 移动应用程序。

  3. .Net Core 这个是微软官方发布的.Net运行时,主要为了打破.net framework的系统限制,实现跨操作系统平台的开发,在一定程序上正在取代后者,官方定义它是 ASP.NET Core 和通用 Windows 平台 (UWP) 所使用的运行时。 它新式、高效,专用于处理大规模的服务器和云工作负荷。

  这三个运行时,.Net 开发人员一定要有一个清醒的认识,他们之间的关系见下图,我们搞清楚运行时之间的关系之后,就可以继续了解三者之间类库框架的关系了

  

跨框架开发介绍

  上边主要介绍的是当前的.net 平台的基信息,同时,因为系统支持的不同,在不同运行时下的支持框架又会有自己不同的特性。 特别是在.Net Core 的逐渐成熟,新旧项目的跨框架支持的需求会越来越多,如何跨框架类库共享,旧项目如何扩展支持是个不得不面对的问题。

  如何跨框架开发,微软在这个问题上先后给出了两个解决方案,一是创建多目标.net core 项目,第二个是创建可移植类库(Portable)或标准库(.Net Standard),第一种方式的实现我会在下边的实现中讲解,这里先介绍下第二种方式的由来,这两种在作用上目的是一样的,只是范围和方式略微有所不同,其中.Net Standard 被认为是最好的解决方案。

  .Net Standard的官方解释是:.NET 标准库是一套正式的 .NET API 规范,有望在所有 .NET 运行时中推出。 推出标准库的动机是在 .NET 生态系统中建立更好的统一性。 ECMA 335 持续为 .NET 运行时行为建立统一性,但适用于 .NET 库实现的 .NET 基类库 (BCL) 没有类似的规范。

  其主要目的就是规范 .net 不同运行时下的框架,提出一套可以通用的api标准。先来看看当前微软官方框架以及当前版本的详细信息:

  也就是其他框架可以实现自己的特性,但同时也要实现对应的.net standard框架api,那么就可以在有需求的框架类库中直接使用对应版本的.net standard框架的类库。下边给出.net standard和其他框架(图中叫平台)的版本对照关系:

  如果我们需要新建的项目能够同时支持.net core 和 .net framework那么我们只需要在vs 2017中新建一个.net standard类库就好了,如果你使用的是vs2015,那你可以新建 可移植类库[英文版对应: Class Library (Portable) ],然后在属性的窗口下切换到.Net Standard 类库即可。

  可移植类库和标准库目的都是一样,主要是影响的上有所不同,新建可移植类库是会让你选择对应的框架,当前类库的实现接口取所选框架的交集,而标准库则和具体框架无关,对应版本的接口都已规范好。

  

跨框架开发实现

当你需要同时对单一项目提供对.net core 和framework的支持,有两种情况我们可以选择,分别是直接建立.net core多目标项目和 建立可移植类库或者标准库

  1. 使用多目标.net core 项目

  使用这个方式主要场景是 必须对某些项目提供framework的特殊功能支持,同时又不希望建立两个独立的项目。

  这种方式的好处是单个项目能够快速编译出不同的目标版本dll,劣势是可能无法在同一解决方案中直接引用当前项目。

  实现方式:

  a. 新建.net core 项目

  b. 修改project.json文件,添加framework的版本,如:

  c. 针对特定目标的代码,直接使用条件编译符号即可,这里是对应的目标版本对应关系,也是条件编译的变量名:

  .NET Framework 2.0 --> net20
  .NET Framework 3.0 --> net30
  .NET Framework 3.5 --> net35
  .NET Framework 4.0 --> net40
  .NET Framework 4.5 --> net45
  .NET Framework 4.5.1 --> net451
  .NET Framework 4.5.2 --> net452
  .NET Framework 4.6 --> net46
  .NET Framework 4.6.1 --> net461
  .NET Framework 4.6.2 --> net462
  .NET Framework 4.6.3 --> net463

  d. 编译生成即可,可以去debug文件夹下查看对应目标的dll

  

  2. 使用标准库或者可移植类库,这个比较简单,只是vs2017才支持直接创建标准库项目,如果在2015中有需要可以先创建可移植项目,去属性页修改目标即可,如图:

以上是我个人对当前.Net体系下的理解,这里给出官方的完整平台图谱:

时间: 2024-12-28 08:25:21

(转).Net基础体系和跨框架开发普及的相关文章

.Net基础体系和跨框架开发普及

.net体系经过十几年发展,发生了很多变化.特别是在最近两年,随着开源和跨平台的发展,衍生出很多概念,像标准库,可移植库,.Net Core等,相信有不少同学对他们之间的关系是有一些困惑的,这里我从基础概念,跨框架开发的注意事项等,对.net的平台和相关概念做一个普及分享.此分享是从个人的知识体系中总结,如有不足,欢迎勘误! 一. 基础概念 .Net 本身是一个通用开发平台,我个人的理解主要分位如下两个层面:1. 语言层面,2. 运行时 首先:在语言层面上 面向 .net 平台的顶层开发语言有很

Scrum入门基础系列之Scrum框架

Scrum入门基础系列之Scrum框架 3条回复 读过几本Scrum书的人,想必对于Scrum框架都可以如数家珍,如Scrum的3个角色,5个会议,3个工件.在展开这些内容之前,我想先介绍一下Scrum的价值观以及敏捷宣言. 敏捷宣言[1] 个体与互动    胜于    流程与工具 可工作的软件    胜于    详尽的文档 客户协作    胜于    合同谈判 响应变化    胜于    遵循计划 也就是说,尽管右项有其价值,我们更看重左项. Scrum价值观[2] 专注:一段时间内只专注于少

【FastDev4Android框架开发】RecyclerView完全解析之下拉刷新与上拉加载SwipeRefreshLayout(三十一)

转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/49992269 本文出自:[江清清的博客] (一).前言: [好消息]个人网站已经上线运行,后面博客以及技术干货等精彩文章会同步更新,请大家关注收藏:http://www.lcode.org 话说RecyclerView已经面市很久,也在很多应用中得到广泛的使用,在整个开发者圈子里面也拥有很不错的口碑,那说明RecyclerView拥有比ListView,GridVi

Jdon框架开发指南

Jdon框架快速开发指南 开发主要步骤如下: JdonFramework6.0以上两步开发见这里. 快速配置指南 新增/查询/修改/删除(CRUD); 批量查询和分页显示 本文Step By Step详细讲解如何使用Jdon框架基于领域模型快速开发这两个功能,通过Jdon框架的可以快速完成系统原型(ArcheType),使得开发者将真正精力集中在每个项目系统的特殊业务处理. 本案例源码下载 按这里查看更详细全面文档 快速配置指南 Jdon框架有一个配置文件叫jdonframework.xml,其

避免重复造轮子的UI自动化测试框架开发

一懒起来就好久没更新文章了,其实懒也还是因为忙,今年上半年的加班赶上了去年一年的加班,加班不息啊,好了吐槽完就写写一直打算继续的自动化开发 目前各种UI测试框架层出不穷,但是万变不离其宗,驱动PC浏览器的基本上底层都是selenium,驱动无线app和浏览器基本是appium.monkey之类的,底层都是基于官方支持的自动化测试框架开发而来,然后上层又做了各种封装 首先在开始计划开发自动化时,第一步是了解目前已有的自动化开发技术,上面说了,最底层的就那几种,根据实际要去测试的业务需求选择合适的自

express框架开发案例

express是基于Node.js平台的web应用开发框架,用express框架开发web项目可以直接构建整个项目框架并且将前端页面跟后台贯穿起来,用起来还是灵活的:最近刚开始学习,写篇博客总结下,涉及到的东西比较多比较杂,可能会有遗漏什么的,有意见或者建议欢迎提出....     要开始这个项目,首先要对express框架.jade.html.bootstrap.js.jQuery.mysql数据库这些知识点有一定的基础. 目录: 一.项目环境准备 二.mysql数据库设计 三.项目编写 一.

Repractise基础篇:Web应用开发七日谈

Repractise基础篇:Web应用开发七日谈 本来想的只是画一个如下的七日图来说说Web开发的,随后又想了想这似乎是一个非常棒的Web开发相关的知识介绍.应用开发是一个很有意思的循环,多数时候我们总会觉得别人的代码写得不好.即使它使用了一种非常好的设计,我们也可能会觉得他很复杂. 而它总结下来就是下面的七天过程里发生的一些事情. 七日谈 其实对于Web开发,有下面这张图就足够了. 第一天:新的开始 我们迎来了我们的新的一个项目,看起来每个人都很兴奋.这一天过得很快,也做了特别多的事. 首先,

框架开发之——AngularJS+MVC+Routing开发步骤总结——5.14

1.延续MVC的观念:包括路由映射的编写,Controller的内容,具体View页面js的分离. 2.结合AngularJS做前端,后端使用Node.Js的写法,引入MVC框架,进行快速的开发. 步骤总结如下: 1.view页面修改,文件夹名称,文件名称,名称的大小写规范,在base文件夹中的main.ejs文件中记得注册. 注意使用angular.js进行前端页面的编写,以及相应页面代码的编写,相关angular.Js用法的收集. 2.view对应js文件的编写,文件夹的名称,文件名称,名称

MapReduce教程(一)基于MapReduce框架开发<转>

1 MapReduce编程 1.1 MapReduce简介 MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算,用于解决海量数据的计算问题. MapReduce分成了两个部分: 1.映射(Mapping)对集合里的每个目标应用同一个操作.即,如果你想把表单里每个单元格乘以二,那么把这个函数单独地应用在每个单元格上的操作就属于mapping. 2.化简(Reducing)遍历集合中的元素来返回一个综合的结果.即,输出表单里一列数字的和这个任务属于reducing. 你向Ma