目前存在多个 .NET 框架。 Microsoft 的宗旨是在最大范围的操作系统和硬件平台上提供 .NET 实现。 下表列出了最主要的 .NET 实现:
实现 | 描述 |
---|---|
.NET Core | 真正跨平台和开源的 .NET 框架,为服务器和命令行应用程序提供了高度模块化的 API 集合 |
Microsoft .NET Framework | 第一个、最大和最广泛部署的 .NET 框架 |
Xamarin | .NET 的移动平台实现,支持 IOS 和 Android,支持单一代码库的移动应用开发,同事允许访问本机平台 API |
Mono | 最早的 .NET 开源实现,是 Xamarin 和 Unity 的基础。目前 Mono 已被 .NET Core 代替 |
Unity | 跨平台 2D/3D 游戏引擎,用于为游戏机、PC、移动设备和网站开发电子游戏 |
应用程序编程接口
数据类型(比如 System.Console
)的所有方法(常规地说是成员)定义了该类型的应用程序编程接口(Application Programming Interface,API)。
API 定义软件如何与其他组件交互,所以单独一个数据类型还不够。通常,是一组数据类型的所有 API 结合起来为某个组件集合创建一个 API。
以 .NET 为例,一个程序集中的所有类型(及其成员)构成了该程序集的 API。类似地,.NET Core 或 Microsoft .NET Framework 中的所有程序集构成了更大的 API。
通常将这一组更大的 API 称为框架,所以我们用“.NET 框架” 一词指代 Microsoft .NET Framework 的所有程序集公开的 API。
API 通常包含一组接口和协议(或指令),帮助你使用一系列组件进行编程。事实上,对于 .NET 来说,协议本身就是 .NET 程序集的执行规则。
C# 和 .NET 版本控制
.NET 框架的开发周期有别于 C# 语言,这造成底层 .NET 框架和对应的 C# 语言使用不同版本号。例如,使用 C# 5.0 编译器将默认基于 Microsoft.NET Framework 4.6 来编译。 下表简单总结了 Microsoft .NET Framework 和 .NET Core 的 C# 和 .NET 版本。
版本 | 描述 |
---|---|
C# 1.0 和 NET Framework 1.0/1.1(Visual Studio 2002 和 2003) | C# 的第一个正式发行版本。Microsoft 团队从无到有创造了一种语言,专门为 .NET 编程提供支持 |
C# 2.0 和 .NET Framework 2.0(Visual Studio 2005) | C# 语言开始支持泛型,.NET Framework 2.0 新增了支持泛型的库 |
.NET Framework 3.0 | 新增一套API来支持分布式通信(Windows Communication Foundation,WCF)、富客户端表示(Windows Presentation Foundation,WPF)、 工作流(Windows Workflow,WF)以及 Web 身份验证(Cardspaces) |
C# 3.0 和 .NET Framework 3.5(Visual Studio 2008) | 添加对 LINQ 的支持,对集合编程 API 进行大幅改进。.NET Framework 3.5 对原有的 API 进行扩展以支持 LINQ |
C# 4.0 和 .NET Framework 4(Visual Studio 2010) | 添加对动态类型的支持,对多线程编程 API 进行大幅改进,强调了多处理器和核心支持 |
C# 5.0 和 .NET Framework 4.5(Visual Studio 2012) | 添加对异步方法调用的支持,同时不需要显式注册委托回调。框架的另一个改动是支持与 Windows Runtime(WinRT) 的互操作性 |
C# 6.0 和 .NET Framework 4.6/.NET Core 1.x(Visual Studio 2015) | 添加字符串插值、空传播(空条件)成员访问、异常过滤器、字典初始化器和其他许多功能 |
C# 7.0 和 .NET Framework 4.7/.NET Core 1.1/2.0(Visual Studio 2017) | 添加元组、解构器、模式匹配、嵌套方法(本地函数)、返回引用等功能 |
随 C# 6.0 增加的最重要的一个框架功能或许是对跨平台编译的支持。换言之,不仅能用 Windows 上运行的 Microsoft .NET Framework 编译,还能使用 Linux 和 macOS 上运行的 .NET Core 实现来编译。
虽然 .NET Core 的功能比完整的 Microsoft .NET Framework 少,但足以使整个 ASP.NET 网站在非 Windows 和 IIS 的系统上运行。这意味着同一个代码库可编译并执行在多个平台上运行的应用程序。
.NET Core 是一套完整 SDK,包含从 .NET Compiler Platform(即“Roslyn”,本身在 Linux 和 macOS 上运行)到 .NET Core “运行时”的一切,另外还提供了像 Dotnet 命令行实用程序(dotnet.exe,自 C# 7.0 引入)这样的工具。
.NET Standard
有这么多不同的 .NET 实现,每个 .NET 框架还有这么多版本,而且每个实现都支持一套不同的、但多少有点重叠的 API,造成框架分叉得越来越厉害。
这增大了写跨 .NET 框架可重用代码的难度,因为要检查特定 API 是否支持。为降低复杂度,Microsoft 推出了 .NET Standard 来定义不同版本的标准应支持哪些 API。换言之,要相容于某个 .NET Standard 版本,.NET 框架必须支持该标准所规定的 API。
但由于许多实现已经发布,所以哪个 API 要进入哪个标准的决策树在一定程度上基于现有实现及其与 .NET Standard 版本号的关联。
原文链接:https://www.vinanysoft.com/c-sharp-basics/introducing/multiple-dotnet-frameworks/