.net体系经过十几年发展,发生了很多变化。特别是在最近两年,随着开源和跨平台的发展,衍生出很多概念,像标准库,可移植库,.Net Core等,相信有不少同学对他们之间的关系是有一些困惑的,这里我从基础概念,跨框架开发的注意事项等,对.net的平台和相关概念做一个普及分享。此分享是从个人的知识体系中总结,如有不足,欢迎勘误!

一. 基础概念

  .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体系下的理解,这里给出官方的完整平台图谱:

下篇文章我将实战演示OSS.Common项目的迁移过程,如果你有兴趣,可以添加公众号(osscoder):

原文地址:http://www.cnblogs.com/sunhoy/p/6371178.html

.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

.Net基础体系和跨框架开发普及相关推荐

  1. GMTC | 《小程序跨框架开发的探索与实践》演讲全文

    前言:随着小程序开发的热度上升,小程序开发框架也层出不穷.但目前每个框架都会绑定一个专属 DSL,如类 React 或者类 Vue,在一个框架内,开发者无法根据团队技术栈自由选择 DSL,同时也无法共 ...

  2. 【java基础知识】spring框架开发时,怎样解决mysql数据库中Timestamp到String的简单转换

    Springboot框架中的sql查询使用的Mybatis,直接查询数据库数据返回的Timestamp是一串数字,并不是我们在数据库中看到的 yyyy-MM-dd HH:mm:ss 格式. 两种方式, ...

  3. 凹凸技术揭秘 · Taro · 开放式跨端跨框架之路

    承载 Web 的主战场转移 2017 年 1 月 9 日凌晨,微信正式推出小程序,为移动端家族增加了新的业务形态和玩法,当大家还在探讨这一新兴平台能做什么的时候,京东率先上线了「京东购物」小程序,随后 ...

  4. Microsoft .net 框架开发平台体系架构

    .net 平台构成 1 底层操操作系统 windows 由于Web服务和使用Web服务的应用程序仍然运行在计算机上,而且既然是计算机都 要有外设,所以我们仍然需要一个操作系统.. Windows添加了 ...

  5. 《微信公众平台开发:从零基础到ThinkPHP5高性能框架实践》——3.3 微信开发者中心...

    本节书摘来自华章计算机<微信公众平台开发:从零基础到ThinkPHP5高性能框架实践>一书中的第3章,第3.3节,作者 方倍工作室,更多章节内容可以访问云栖社区"华章计算机&qu ...

  6. IOS开发基础之使用AFNetworking框架下载服务器资源图片

    IOS开发基础之使用AFNetworking框架下载服务器资源图片 info.plist加入这句 <key>NSAppTransportSecurity</key> <d ...

  7. IOS开发基础之使用AFNetworking框架实现xml文件的解析

    IOS开发基础之使用AFNetworking框架实现xml文件的解析 info.plist加入这行代码 <key>NSAppTransportSecurity</key> &l ...

  8. IOS开发基础之使用AFNetworking框架实现文件上传get和post请求

    IOS开发基础之使用AFNetworking框架实现文件上传get和post请求 AFNetworking框架 请自行从github官网clone.命令为 git clone xxx.xxx是项目的地 ...

  9. 《微信公众平台开发:从零基础到ThinkPHP5高性能框架实践》——1.2 微信公众账号注册...

    本节书摘来自华章计算机<微信公众平台开发:从零基础到ThinkPHP5高性能框架实践>一书中的第1章,第1.2节,作者 方倍工作室,更多章节内容可以访问云栖社区"华章计算机&qu ...

最新文章

  1. linux修改权限重启恢复,Linux错误执行:chmod 777 .*或chown -R * 的补救方法
  2. retain和copy还有assign的区别
  3. Winforn中使用代码动态生成控件
  4. [蓝桥杯2016初赛]报纸页数-生活常识+思维
  5. 知识图谱最新权威综述论文解读:知识表示学习部分
  6. 小鱼的游泳时间(洛谷-P1425)
  7. 草稿-调试让本地的django项目上线到云服务器-不完整版
  8. java程序的开发步骤为,开发与运行Java程序需要经过的三个主要步骤为: ( )、( )、( )...
  9. 迷你世界电锯机器人_迷你世界:石像机器人升级版,制作如此简单!
  10. sscanf 与 sscanf_s的区别
  11. 免费远程桌面连接工具
  12. python句柄无效_python免注册调用大漠出现错误句柄无效
  13. java字节流字符流复制文件大小不一致及乱码
  14. 服务器增加cpu图,Intel服务器路线图:14nm再战两年 上胶水封装
  15. BIND+Mysql实现DNS轮询泛解析和IP视图
  16. Linux 使用gcore、gdb、pstack、strace命令查死锁问题
  17. PuTTY的使用技巧 (转)
  18. linux pcm和alsa 区别,linux alsa pcm(此pcm非硬件pcm接口)
  19. 中兴c300业务板_高价回收中兴c300业务板ETGH板卡 原装
  20. “十二五”制造业信息化工程战略规划

热门文章

  1. 关于异或的一些东西和应用
  2. 对象androidandroid 开发中 如何取得ListView 的 每条Item 的对象
  3. 万字长文 - 解读功能开关 | IDCF
  4. 持续集成、持续交付(CI/CD)开篇,先来唠唠嗑
  5. Http Only Cookie保护AccessToken
  6. 如何排查 StackOverflow 异常
  7. MIPS投RISC-V是龙芯新征程的开始
  8. 程序员过关斩将--搞定秒杀,只需要这几步!!
  9. ASP.NET Core Blazor 初探之 Blazor Server
  10. .NET 5.0 Preview 2发布解析