DIY极客营

找论坛
石中枯叶蝶
Lv1 太平洋舰队新兵
太平洋舰队新兵 贡献4,距离下一级还需76贡献
楼主
2018-08-04 09:33 0 0 只看楼主
电梯直达 
.NET Framework 时代[p=26, null, left]远在 2000 年的北京赛车平台出租QQ2952777280【话仙源码论坛】hxforum.com【木瓜源码论坛】papayabbs.com时候,微软就发布了 .NET 1.0。然后在 2001 年的时候就成为了国际标准。[/p][p=26, null, left]标准是需要实现的,微软对这个标准的第一个实现就是 .NET Framework,也是多年来我们所熟悉的 .NET。但是,这个 .NET 的实现是基于 Windows 平台的,其中包含了大量基于 Windows 的实现,甚至许多 Windows 专有的内容,比如 GDI 支持等等。微软从前推广的 .NET 跨平台,其实,是在微软平台上的跨平台。[/p][p=26, null, left]由于 .NET Framework 是直接基于 Windows 平台的,所以,.NET Framework 的程序是不能真正跨平台的,比如运行在 Linux 上。[/p]多样化的 .NET 实现[p=26, null, left].NET 确实是一个非常优秀的设计,它吸引了大量的开发者,所以,世界上还存在着许多其它的 .NET 实现。他们自己开发了基于 .NET 标准的其它实现,例如,非常著名的 Mono 就是一个由 Xamarin 公司(先前是Novell,最早为Ximian)所主持的自由开放源代码项目。[/p][p=26, null, left]但是,包括微软自己的 .NET Framework 在内的各种 .NET 实现,看起来都是 .NET,甚至都可以使用 C# 来开发程序,都是面向对象的,其实是各不兼容的,比如它们的底层所支持的 API 就各不相同。这导致的结果就是,你在各个平台上开发的程序集其实是无法通用的。因为对于某个 API 来说,有的平台支持,有的平台就不支持。[/p][p=26, null, left]虽然开发人员可以通过条件编译等手段来开发可以支持在各种 .NET 实现上通用的类库,显然这是一个艰巨的任务,你必须要清楚各个实现的各个版本到底支持了哪些 API。[/p].NET Standard 和 .NET Core[p=26, null, left]到 2014 年的时候,微软的策略转向了开源和跨平台,.NET Framework 显然无法做到这一点,.NET Core 横空出世,它是开源,完全跨平台的 .NET 实现,也是微软的第二个主要 .NET 实现。现在问题来了,即使对于微软来说,现在都有了两个主要的 .NET 实现了,到底哪个是正宗的 .NET 的呢?[/p][p=26, null, left]计算机领域有个概念,如果你不能统一它,就增加一个抽象层。微软又搞出一个 .NET Standard 的新概念。[/p][p=26, null, left]顾名思义,.NET Standard 就是 .NET 的标准,它是一组规范,定义了在 .NET 的实现中到底应该包括哪些 API ,你可以在这里查看这个标准的官方说明。其中的要点如下:[/p]

  • [p=26, null, left]为所有的 .NET 实现定义一组统一的基础类库支持的 API[/p]
  • [p=26, null, left]使得开发人员能够基于这个标准开发可以在各种 .NET 中使用的可移植库[/p]
[p=26, null, left]它的好处在于,开发人员不用再逐个平台的检查是否支持某个 API 了,只要看这个平台支持到了 .NET Standard 的哪个版本就行了,只要目标平台支持某个 .NET Standard ,就可以确认你的类库可以跨 .NET 实现通用了。[/p][p=26, null, left]越高的 .NET Standard 版本包含的 API 越多,但通用性越差,因为不是所有的平台都支持这么多的 API,显然,越低的 .NET Standard 兼容性越好,因为它要求的 API 越少,所以,支持的平台也越多。[/p][p=26, null, left]对于开发人员来说,有了这个 .NET Standard,开发通用的类库自然简单多了。[/p][p=26, null, left]微软给出了一个各个常见平台各个版本所支持的 .NET Standard 标准的列表。[/p][p=26, null, left]评论[/p].NET Core 与 .NET Framework 的选择[p=26, null, left].NET Framework 和 .NET Core 都是 .NET,只不过它们支持的 API 并不完全一致。开发人员更加头疼了,都是微软的亲儿子,我们应该选哪个呢?[/p][p=26, null, left]从支持程度来看,微软主要在推广 .NET Core,以支持跨平台应用,对 .NET Framework 的支持倒在其次。[/p][p=26, null, left].NET Core 从 2.0 开始追上 .NET Framework 的 API 数量,达到支持 .NET Standard 2.0 水平,更新速度明显快于 .NET Framework。[/p][p=26, null, left]刚刚发布的 .NET Core 2.1 中支持了 Span,这个特性到明年的 .NET Framework 4.8 都不会支持。所以,新应用的开发应该首选 .NET Core。[/p][p=26, null, left]不过,有一个问题你不得不考虑一下,.NET Core 是跨平台的,必须支持所有平台,因此,它不可能包含 Windows 特定的一些 API,比如注册表的访问,所以。理论上讲,如果你希望在开发中使用一些 Windows 平台专员的 API,它是不会出现在 .NET Core 中的。[/p][p=26, null, left]别担心,微软在 .NET 2.0 开始,微软提供了 Microsoft.Windows.Compatibility 来解决这个问题,该包提供了额外的约 20000 API 以支持 Windows 平台。可以在 .NET Core 项目中,添加对这个包的引用。[/p][p=26, null, left]Windows 兼容性包通过 NuGet 包 Microsoft.Windows.Compatibility 提供,可从面向 .NET Core 或 .NET Standard 的项目引用。它提供了约 20,000 个 API 以支持原来在 .NET Framework 中支持,但是在 .NET Standard 中没有的 API。[/p][p=26, null, left]对于 NuGet 库中的包来说,在发布于 2017/8/14 的 Announcing .NET Core 2.0 中,已经达到了约 70% 的支持度。[/p]总结

  • [p=26, null, left]对于 .NET 来说,首先要认识到 .NET Standard 是 .NET 的标准,这个标准有自己版本号,目前的版本是 2.0。[/p]
  • [p=26, null, left]在这个 .NET Standard 标准之下,有许多 .NET 的实现,比较著名的就.NET Framework 和 .NET Core 了,它们各自有各自的实现版本,目前 .NET Framewrok 是 4.7.2,而 .NET Core 则是 2.1。[/p]
  • [p=26, null, left]API 最丰富的就是 .NET Framework 了,不过它仅支持 Windwos 平台。[/p]
  • [p=26, null, left].NET Core 的 2.1 版本,加上 Microsoft.Windows.Compatibility 这个包,已经很接近 .NET Framework 的支持水平,NuGet 中的类库也已经绝大多数支持了 .NET Core, 微软还在疯狂的填补这个差距。[/p]
  • [p=26, null, left]如果是新的项目,强烈建议基于 .NET Core 开发[/p]
  • [p=26, null, left]当前使用 Visual Studio 和 Visual Studio Code 都可以开发 .NET Core 应用[/p]

您需要登录后才可以发帖 登录 | 立即注册

其他登录方式:

常用表情
论坛热词
太平洋电脑网论坛帖子仅代表作者本人意见,不代表网站立场。请勿轻信特价、汇款、中奖等信息,
请勿轻易透露个人资料,因此产生的一切后果,PConline不承担任何责任
回复 发新帖 找论坛 反馈 回顶部