近日,微软发布了.NET Core 2.0,但是开发人员中间仍然存在一些疑惑,就是.NET Core、.NET Standard、Xamarin和.NET Framework有什么不同

.NET Framework用于构建桌面应用程序和运行在互联网信息服务器(IIS)上的ASP.NET应用程序。它是第一个托管框架。

Xamarin是一个用于构建iOS、Android、macOS和桌面应用程序的框架。

.NET Core

.NET Core是免费、跨平台的,是托管框架的开源实现。它支持4种类型的应用程序:控制台、ASP.NET Core、云和通用Windows平台(UWP)。Windows FormsWindows Presentation Foundation(WPF)并不包含在.NET Core中。

从技术上讲,.NET Core仅支持控制台应用程序。ASP.NET Core和UWP是以.NET Core为基础构建的应用程序模型。

与.NET Framework不同,.NET Core没有作为Windows组件考虑。因此,更新是以NutGet包的形式,而不是通过Windows Update。由于.NET Core运行时安装成了App-Local,而应用程序升级是通过包管理器完成的,所以应用程序可以关联特定的.NET Core版本以及单独升级。

.NET Standard

托管框架的每一种实现都有一套自己的基类库。基类库(BCL)包含诸如异常处理、字符串、XML、I/O、网络和集合这样的类。

.NET Standard是一项实现BCL的规范。由于.NET实现需要遵循这项规范,所以应用程序开发人员就不用担心每一种托管框架实现的BCL不同。

框架类库(FCL),如WPF、WCF、ASP.NET,不包含在BCL中,因此,也就不包含在.NET Standard中。

.NET Standard与.NET实现之间的关系就和HTML规范与浏览器之间的关系一样。后者是前者的实现。

因此,.NET Framework、Xamarin和.NET Core,每一种托管框架都实现了.NET Standard中的BCL。随着计算机工业不断推出新的硬件和操作系统,将来还会出现新的.NET托管框架。该标准让应用程序开发人员知道,他们可以依赖于一套始终如一的API。

每个.NET版本都对应一个.NET Standard版本。

API一致,将应用程序移植到不同的托管实现以及提供工具都会更简单。

.NET Standard被定义为一个单独的NuGet包,因为所有的.NET实现都必须支持它。工具变得简单了,因为对于特定的版本,它们有一套相同的API。你还可以针对多个.NET实现构建一个库项目。

你还可以构建特定平台API的.NET Standard封装器。

.NET Standard vs 可移植类库

可移植类库做的不是同一件事吗?

可移植类使用多个平台均都支持的通用API。因此,支持的平台越多,可用的API就越少,而且,对于特定的平台组合,很难知道到底支持哪些API。对于一个新平台,已有的PCL必须重新编译。PCL还需要微软针对每个平台创建一个新的框架实现分支。

由于.NET Standard确定了API,而不是一个实现,所以不需要重新编译应用程序。任何新发布的.NET实现都实现了必须的库。应用程序不需要重新编译就可以运行在新的硬件平台或操作系统上。从理论上讲,在调用API时可能会捕获到NotSupportedException异常,但那种情况应该很少见。

小结

.NET Standard是一项API规范,每一个特定的版本,都定义了必须实现的基类库。

.NET Core是一个托管框架,针对构建控制台、云、ASP.NET Core和UWP应用程序进行了优化。每一种托管实现(如Xamarin、.NET Core或.NET Framework)都必须遵循.NET Standard实现BCL。

原文链接:http://www.infoq.com/cn/news/2017/10/dotnet-core-standard-difference

查看英文原文:.NET Core and .NET Standard: What Is the Difference?

最新文章

  1. 让OMCS支持更多的视频采集设备
  2. weex image
  3. SQL Server利用递归把所有【子部门员工】汇总到【一级根节点部门】
  4. 通过Mac远程调试iPhone/iPad上的网页(转)
  5. Sublime Text 插件 & 使用技巧
  6. c# 判断点是否在区域内 点在区域内 在多边形内 判断
  7. Java多线程初学者指南(6):慎重使用volatile关键字
  8. Hibernate之总结
  9. 201621123062《java程序设计》第四周作业总结
  10. machine learning 之 导论 一元线性回归
  11. 软工作业(JAVA)
  12. ubuntu下安裝sogou拼音
  13. js中的值类型和引用类型的区别
  14. JDK8新增接口的默认方法与静态方法
  15. UI自动化(三)css优先级
  16. asp.net core 2.0中的配置(1)---Configuration
  17. 论 大并发 下的 乐观锁定 Redis锁定 和 新时代事务
  18. polymorphism多态
  19. vmware中装的ubuntu上不了网
  20. 无向连通图求割边(桥)hdu4738,hdu3849

热门文章

  1. [洛谷P1452]Beauty Contest
  2. CF#312 558e A Simple Task
  3. Spring-Boot基于配置按条件装Bean
  4. CF549H:Degenerate Matrix ——题解
  5. 洛谷 P1966 火柴排队 解题报告
  6. URAL.1033 Labyrinth (DFS)
  7. NOIP2016Day2T3愤怒的小鸟(状压dp) O(2^n*n^2)再优化
  8. Lua Go R HEXO Kotlin 简单介绍
  9. jq的each理解
  10. bzoj1177 [Apio2009]Oil 二维前缀最大值,和