欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

.NET Core和.NET Standard有什么不同

程序员文章站 2022-04-29 14:11:46
近日,微软发布了.NET Core 2.0,但是开发人员中间仍然存在一些疑惑,就是.NET Core、.NET Standard、Xamarin和.NET Framework有什么不同。 .NET Framework用于构建桌面应用程序和运行在互联网信息服务器(IIS)上的ASP.NET应用程序。它 ......

 

.NET Core和.NET Standard有什么不同

 

近日,微软发布了.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。

.NET Core和.NET Standard有什么不同

原文链接

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

 

参考资料

https://github.com/dotnet/standard/blob/master/docs/versions.md