万树IT:NET基础体系及跨框架开发技巧

.NET 体系经过十几年发展,发生了很多变化。特别是在最近两年,随着开源和跨平台的发展,衍生出很多概念,像标准库,可移植库,.Net Core等,相信有不少同学对他们之间的关系是有一些困惑的,这里我从基础概念,跨框架开发的注意事项等,对.net的平台和相关概念做一个普及分享。此分享是从个人的知识体系中总结,如有不足,欢迎勘误!
 
一. 基础概念
 
.NET本身是一个通用开发平台,我个人的理解主要分位如下两个层面:
 
语言层面
 
运行时
 
首先:在语言层面上
 
面向 .net 平台的顶层开发语言有很多,常见的如:C#,F#和Visual Basic等,.net框架提供了这些语言使用的公共语言运行时,运行时与具体的语言无关,它定义了这些语言的公共规范,像类型系统,文件格式等。
 
这些高级语言编写的代码被称为托管代码,这些代码需要通过编译器编译为中间代码(IL),然后由公共语言运行时(CLR)接管,再经过JIT编译为机器代码交给cpu运行。
 
公共语言运行时自动处理对象布局并管理对象引用,当不再使用对象时释放它们。 按这种方式实现生存期管理的对象称为托管数据。 垃圾回收消除了内存泄漏以及其他一些常见的编程错误。
 
其次:运行时层面
 
当前.net的运行时主要有.Net Framework, Mono for Xamarin和.Net Core 。这些运行时在不同是时期主要是为了解决当时所面临的问题衍生而出,这里介绍下他们相互的关联和职责。
 
 .Net Framework ,这个是自2002年就已存在的.Net运行时,也是现在开发人员还在经常使用的框架。涵盖了桌面,web等应用,同时包含了一些特定于windows的api,不过其只能运行在windows平台的限制,给对跨系统平台要求较高的开发需求造成很大的困难,非常适合用于桌面应用的开发。
 
Mono for Xamarin ,这个是当时为了实现.net 的跨系统运行,在2004年非官方组织发布的一个.Net运行时,当时主要是能够支持在.net framework下编写的代码在linux等系统下运行,当前主要包含适用于 iOS、Android、Xamarin.Forms 和 Xamarin.Mac 的 API。 Mono for Xamarin 非常适合生成 iOS 和 Android 移动应用程序。
 
.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体系下的理解,这里给出官方的完整平台图谱:
    • 0
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 0
      评论
    目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值