目前存在多个 .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/

多个 .NET 框架的更多相关文章

  1. 避免重复造轮子的UI自动化测试框架开发

    一懒起来就好久没更新文章了,其实懒也还是因为忙,今年上半年的加班赶上了去年一年的加班,加班不息啊,好了吐槽完就写写一直打算继续的自动化开发 目前各种UI测试框架层出不穷,但是万变不离其宗,驱动PC浏览 ...

  2. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  3. 旺财速啃H5框架之Bootstrap(五)

    在上一篇<<旺财速啃H5框架之Bootstrap(四)>>做了基本的框架,<<旺财速啃H5框架之Bootstrap(二)>>篇里也大体认识了bootst ...

  4. Angular企业级开发(5)-项目框架搭建

    1.AngularJS Seed项目目录结构 AngularJS官方网站提供了一个angular-phonecat项目,另外一个就是Angular-Seed项目.所以大多数团队会基于Angular-S ...

  5. Scrapy框架爬虫初探——中关村在线手机参数数据爬取

    关于Scrapy如何安装部署的文章已经相当多了,但是网上实战的例子还不是很多,近来正好在学习该爬虫框架,就简单写了个Spider Demo来实践.作为硬件数码控,我选择了经常光顾的中关村在线的手机页面 ...

  6. 制作类似ThinkPHP框架中的PATHINFO模式功能

    一.PATHINFO功能简述 搞PHP的都知道ThinkPHP是一个免费开源的轻量级PHP框架,虽说轻量但它的功能却很强大.这也是我接触学习的第一个框架.TP框架中的URL默认模式即是PathInfo ...

  7. 旺财速啃H5框架之Bootstrap(四)

    上一篇<<旺财速啃H5框架之Bootstrap(三)>>已经把导航做了,接下来搭建内容框架.... 对于不规整的网页,要做成自适应就有点玩大了.... 例如下面这种版式的页面. ...

  8. 一起学 Java(三) 集合框架、数据结构、泛型

    一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...

  9. Hibernatel框架关联映射

    Hibernatel框架关联映射 Hibernate程序执行流程: 1.集合映射 需求:网络购物时,用户购买商品,填写地址 每个用户会有不确定的地址数目,或者只有一个或者有很多.这个时候不能把每条地址 ...

  10. [虾扯蛋] android界面框架-Window

    从纯sdk及framwork的角度看,android中界面框架相关的类型有:Window,WindowManager,View等.下面就以这几个类为出发点来概览下安卓开发的"界面架构&quo ...

随机推荐

  1. F#周报2019年第48期

    新闻 拥抱可空引用类型 介绍Orleans 3.0 视频及幻灯片 组合的力量 关于.NET:探索新的用于.NET的Azure .NET SDK .NET设计审查:GitHub快速审查 FableCon ...

  2. Java方法的可变参数

    class Demo { public static int sum(int ... data) { //此处可以传递一个数组,也可以是多个参数 int sum = 0; for (int i : d ...

  3. LESSON 1-Introduction

    Keywords: Communication system, Channel model, Channel capacity by Shannon 1. Two fundamental archit ...

  4. 【Python3爬虫】网络小说更好看?十四万条书籍信息告诉你

    一.前言简述 因为最近微信读书出了网页版,加上自己也在闲暇的时候看了两本书,不禁好奇什么样的书更受欢迎,哪位作者又更受读者喜欢呢?话不多说,爬一下就能有个了解了. 二.页面分析 首先打开微信读书:ht ...

  5. 【决战西二旗】|理解Sort算法

    前言 前面两篇文章介绍了快速排序的基础知识和优化方向,今天来看一下STL中的sort算法的底层实现和代码技巧. 众所周知STL是借助于模板化来支撑数据结构和算法的通用化,通用化对于C++使用者来说已经 ...

  6. bs4-爬取小说

    bs4 bs4有两种运行方式一种是处理本地资源,一种是处理网络资源 本地 from bs4 import BeautifulSoup if __name__ == '__main__': fr = o ...

  7. 第三章 学习Shader所需的数学基础(3)

    @[TOC] 1. 顶点的坐标空间变换过程 我们知道,在渲染流水线中,一个顶点要经过多个坐标空间的变换才能最终被画在屏幕上.一个顶点最开始是在模型空间中定义的,它最后会被变换到屏幕空间中,得到真正的屏 ...

  8. C# 中的委托和事件(一)

    引言 委 托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真 是太容易了,而没有 ...

  9. 15.Django基础十一之认证系统

    一 auth模块 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Django作为一个 ...

  10. fastDfs-理解安装,一篇就够了

    觉得可以,点关注 contos7 fastdfs-5.11 fastdfs-nginx-module-1.20 libfastcommon-1.0.40 nginx-1.12.0 在百度网盘可以找到对 ...