近日,微软发布了.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 Forms 和 Windows 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。
评论