多个 .NET 框架

2022-10-12,,

目录

  • c# 和 .net 版本控制
  • .net standard

目前存在多个 .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 版本号的关联。

原文链接:

《多个 .NET 框架.doc》

下载本文的Word格式文档,以方便收藏与打印。