微软在 connect()大会上宣布.NET Core 将开源。它将提供一个支持包括Windows、Linux 和Mac OSX 在内的所有平台的单一代码库。近日,微软项目经理Immo Landwerth 给出了更多关于.NET Core 是什么以及它将如何“为未来所有的.NET 平台奠定基础”的信息。
Immo 解释说,.NET 实际上是一系列框架,每个框架针对一个特定平台,而且归不同的微软团队所有,这在 API 和实现方面都不可避免地产生了差异。.NET Core 是.NET Framework 的一个新的分支,旨在为特定于平台的扩展提供一个共同的基础。每个扩展提供只能用于特定应用程序模型的 API,例如,面向.NET 本地应用程序的 WinRT 互操作扩展或者面向 ASP.NET 5 应用程序的 MVC。这个共同的层称为统一基类库(BCL),它位于一个包含.NET 运行时的薄层之上。
据 Immo 介绍,基类库在.NET 已经提供的可移植类库的基础上又迈进了一步。在.NET 中,PCL 只定义 API 外观,而实现仍然特定于每个平台,这样就产生了不同程度的实现不一致性。BCL 不仅提供一个跨所有支持平台的共同的 API,而且实际上也以统一的方式实现:“BCL 大部分是纯 MSIL 程序集,可以原样共享。”有趣地是,微软为那些只能用于特定平台的 API 选择的方法确保他们在所有平台上都可以工作:
比起回过头来努力在上层提供一个一致的 API 栈,要求每个拥有特定组件的团队思考他们的 API 如何跨所有平台工作要简单许多。那是因为可移植性不是可以后续提供的东西。
.NET Core 带来的另外一项有趣的变化是使用 NuGet 作为基本的交付系统。.NET Core 将会作为一个细粒度的包的集合交付,每个包对应一个程序集。同时,微软将提供.NET Core 分发包。本质上,它只是经过微软测试的、特定.NET 版本的所有包的快照副本,用于那些不需要额外的自由进行 NuGet 包混搭的场景。
Immo 介绍, NuGet 的使用以及向更加模块化的设计转变使“.NET Core 平台有可能转变成一种应用程序本地框架。”如此一来,每个应用程序将只需要部署框架中它需要的部分。这样做的主要好处是,当应用程序需要升级.NET Core 时,将不会破坏与其它现有应用程序的兼容性,而升级整台机器共享的.NET Framework 就会如此。
最后,Immo 明确指出,在 Visual Studio 2015 发布之前,.NET Core 将是.NET Framework 的一个纯子集。不过将来,.NET Core 的发布周期将会比.NET Framework 短,所以在有一些时间点上,一项功能将只在基于.NET Core 的平台上提供,直到.NET Framework 平台的版本赶上来。
有一点必须注意,.NET Core 目前并不支持桌面应用程序,后者将仍然使用.NET Framework,而且“没有计划提供一个跨平台的 UI 框架。”在回复其博文的一条评论时,Immo 写道,他们“绝对会在.NET Core 中提供 Console API”。因此,开发人员将可以用它编写控制台应用程序,虽然他并没有提供任何时间表。
读者可以在 NuGet 上浏览所有的.NET Core 包,它们用前缀“System.”或“Microsoft.”标识。源代码在 GitHub 上提供。要试用.NET Core,可以下载 Visual Studio 2015 预览版。
查看英文原文: A First Look to .NET Core
评论