.NET框架(英語:.NET Framework)是由微软开发,一个致力于敏捷软件开发(agile software development)、快速应用开发(rapid application development)、平台无关性和网络透明化的软件框架。.NET是微软为2000年代对伺服器和桌面型软件工程迈出的第一步。.NET包含许多有助于互联网和内部网应用迅捷发的技术。
开发者 | Microsoft |
---|---|
首次发布 | 2002年2月13日 |
当前版本 | 4.8.1(2022年8月9日 | )
操作系统 | Windows 98或更新 Windows NT 4.0或更新 |
类型 | 软件框架 |
许可协议 | 专有软件 FCL采用微软Ms-RSL共享原始码许可[1] 部分采取MIT许可证[2][3] |
网站 | www |
.NET框架是微软公司继Windows DNA之后的新发平台,采用系统虚拟机运行,以通用语言运行库(Common Language Runtime)为基础,支持多种语言(C#、F#、VB.NET、C++、Python等)的开发。
.NET也为应用程序接口(API)提供了新功能和发工具。这些革新使得程式设计员可以同时进行Windows应用软件和网络应用软件以及组件和服务(web服务)的开发。.NET提供了一个新的反射性的且面向对象编程编程接口。.NET设计得足够通用化从而使许多不同高阶语言都得以被汇集。
甲骨文公司的Java编程语言和Java平台企业版技术是.NET平台的竞争对手之一。
2014年11月12日,微软宣布完全开放.NET框架的源代码,并提供给Linux和macOS使用。[4] 微软于2019年4月发布了该框架作为专有软件的最后一个主要版本 .NET框架 4.8,随后于 2022年8月发布了 4.8.1。从此之后便只有安全性或是稳定性的臭虫修复更新,亦无后续版本改动的项目。.NET框架 4.8将会持续包含在Windows的更新中接收安全性更新,截至2023年11月为止,并无将其移除的项目。[5]官方推荐后续的新开发改用 .Net 6 起的版本进行开发。[6]
版本
版本 | 通用语言运行库 | 发布时间 | 随同Visual Studio分发 | 预安装于Windows | 包含之前版本 | ||
---|---|---|---|---|---|---|---|
客户端版 | 伺服器版 | ||||||
1.0[0] | 1.0 | 2002年2月13日 | .NET | 不适用 | 不适用 | 不适用 | |
1.1 | 1.1 | 2003年4月24日 | .NET 2003 | 不适用 | 2003 | ||
2.0 | 2.0 | 2005年11月7日 | 2005 | 不适用 | 2003 R2 | ||
3.0 | 2006年11月6日 | 不适用 | Vista | 不适用 | 2.0 | ||
3.5 | 3.5 | 2007年11月19日 | 2008 | 不适用 | 不适用 | 3.0 SP1 (2.0 SP1) | |
3.5.1 | 2008年2月4日 | 不适用 | 不适用 | 2008 | |||
3.5 SP1 | 2008年8月11日 | 2008 SP1 | 不适用 | 不适用 | 3.0 SP2 (2.0 SP2) | ||
3.5.1 SP1 | 2009年7月22日 | 不适用 | 7 | 2008 R2 | |||
4 | 4.0 | 4.0 | 2010年4月12日 | 2010 | 不适用 | 不适用 | 不适用 (置位更新) |
4.5 | 2012年8月15日 | 2012 | 8 | 2012 | |||
4.5.1 | 2013年10月17日 | 2013 | 8.1 | 2012 R2 | |||
4.5.2 | 2014年5月5日 | 不适用 | 不适用 | 不适用 | |||
4.6 | 2015年7月20日 | 2015 | 10 | 不适用 | |||
4.6.1 | 2015年11月30日 | 2015 Update 1 | 10 v1511 | 不适用 | |||
4.6.2 | 2016年8月2日 | 不适用 | 10 v1607 | 2016 | |||
4.7 | 2017年4月5日 | 2017 v15.3 | 10 v1703 | 不适用 | |||
4.7.1 | 2017年10月17日 | 2017 v15.5 | 10 v1709 | v1709 | |||
4.7.2 | 2018年4月30日 | 2019 | 10 v1803 | v1803 | |||
4.8 | 2019年4月18日 | 不适用 | 10 v1909 | v1909 | |||
4.8.1 | 2022年8月9日 |
版本 | 指令集架构 | Windows版本 | |
---|---|---|---|
个人电脑 | Windows Server | ||
1.0 | IA-32 | 98, ME, NT 4.0 SP6a, 2000, XP | NT 4.0 SP6a, 2000 |
1.1 | IA-32[1] | NT 4.0 SP6a, 2000, XP,Vista | NT 4.0 SP6a, 2000, 2003, 2008 |
2.0 ~ 3.5 | IA-32, Itanium, x86-64 | XP, Vista, 7, 8, 8.1, 10 | 2003, 2003 R2, 2008, 2008 R2, 2012, 2012 R2, 2016, 2019 |
4.0 | IA-32, Itanium[2],x86-64 | XP SP3, Vista SP1, 7, 8, 8.1, 10 | 2003 SP2, 2003 R2 SP2, 2008, 2008 R2, 2012, 2012 R2, 2016, 2019 |
4.5[3] ~ 4.6 | IA-32, x86-64 | Vista SP2, 7 SP1, 8, 8.1, 10 | 2008 SP2, 2008 R2 SP1, 2012, 2012 R2, 2016, 2019 |
4.6.1 | 7 SP1, 8, 8.1, 10 | 2008 R2 SP1, 2012, 2012 R2, 2016, 2019 | |
4.6.2 ~ 4.8 | 7 SP1, 8.1, 10 v1607起 | ||
4.8.1 | IA-32, x86-64, ARM64 | 10 v20H2-v21H2, 11 v21H2 | 2022 |
发行历史
完整版号 - 1.0.3705
这是最早的.NET架构,于2002年发行。它可以以一个独立且可重新分发的包的形式或在一个软件发展工具包集中被获得。它也是第一个微软Visual Studio .NET的发行版的一部分(也被称作Visual Studio .NET 2002)。
完整版号 - 1.1.4322
这是首个主要的.NET框架升级版本,发行于2003年。它可以以一个独立的可重新分发的包的形式或在一个软件发展工具包集中被获得。它也是第二个微软Visual Studio .NET版本的一部分(也被称作Visual Studio .NET 2003)。它也是首个被Windows操作系统-Windows Server 2003所内建的.NET框架版本。
自1.0版本以来的改进:
- 内建了对mobile ASP.NET控件的支持。这在1.0版本是以附加功能方式实现的,现在已经集成到框架的内部。
- 安全方面的变更 - 使得Windows窗体代码以可靠的行为执行,从而可以在Internet环境内安全运行,并且加入了ASP.NET应用程式的代码安全访问功能。
- 内建了对ODBC和Oracle数据库的支持。这在1.0版本是以附加功能方式实现的,现在已经集成到框架的内部。
- .NET Compact Framework- 这是一个用于智慧装置(例如Pocket PC或者SmartPhone)的.NET框架的子集。
- 对IPv6的支持。
- 大量的API变更[7]。
完整版号 - 2.0.50727.42,发行于2005年10月27日。
.NET框架 2.0的组件都包含在 Visual Studio 2005和SQL Server 2005里面。通过MSDN Universe版可以免费下载RTM版本。
自1.1版本以来的改进:
- 大量的API变更[7]。
- 新的API让需要管理.NET运行库实例的非.NET的应用程式可以做到这点。这个新的API对.NET运行库的各种功能,包括:多线程、存储器分配、代码加载等[8],提供了很好的控制。它最初是为Microsoft SQL Server能够有效率的使用.NET运行库而设计的,因为Microsoft SQL Server拥有它自己的日程管理器和存储器管理器。
发布日期2006/11/21。曾用名“WinFX”。依然使用.NET框架 2.0版本的公共语言运行库(CLR),并加入了适应未来软件发展方向的4个框架:
- Windows Presentation Foundation(WPF):提供更佳的用户体验,用来开发Windows Forms程序以及浏览器应用程式(参见WPF/E).
- Windows Communication Foundation(WCF):提供SOA(面向服务的软件构架)支持的安全的网络服务(Web Service)框架。
- Windows Workflow Foundation(WF):提供一个设计与发展工作流程导向(Workflow-oriented)应用程式基础支持的应用程序接口。
- Windows CardSpace:提供一个SSO的解决方案,每个用户都有各自的CardSpace。
这个版本将包含一个支持C#和VB.Net中心的语言特性的编译器,以及对语言集成查询(LINQ, Language-Integrated Query)的支持。该版本随Visual Studio 2008一起发布。
同时,.NET框架 3.5自动包含.NET框架 2.0 SP1以及.NET框架 3.0 SP1,用于为这两个版本提供安全性修复,以及少量新增的类库(如System.DateTimeOffest),此版本提供的新功能有:
- 扩展方法(Extension Method)属性(Attribute),用于为扩展方法提供支持
- LINQ支持,包括LINQ to Object、LINQ to ADO.NET以及LINQ to XML
- 表达式目录树(Expression Tree),用于为Lambda表达式提供支持
- 与语言集成查询(LINQ)和数据感知紧密集成。借助这个新功能,您可以使用相同的语法,在任何支持LINQ的语言中编写相关代码,以筛选和枚举多种类型的SQL数据、集合、XML和数据集,以及创建它们的投影。
- 利用ASP.NET AJAX可以创建更有效、更具交互性、高度个性化的Web体验,这些体验在所有最流行的浏览器上都能实现。
- 用于生成WCF服务的全新Web协议支持,包括AJAX、JSON、REST、POX、RSS、ATOM和若干新的WS-*标准。
- Visual Studio 2008中面向WF、WCF和WPF的完整工具支持,其中包括支持工作流的服务这一新技术。
- .NET框架 3.5基类库(BCL)中的新类可满足许多常见的客户请求。
.NET框架 3.5 SP1自动包含.NET框架 2.0 SP2以及.NET框架 3.0 SP2。该版本随Visual Studio 2008 SP1发布,此版本提供了下列的新功能:
- 新增的ASP.NET功能包括ASP.NET动态数据和ASP.NET AJAX附加功能,前者提供了无需编写代码就可实现数据驱动的快速开发的丰富支架框架,后者为管理浏览器历史记录提供了支持(后退按钮支持)。
- ADO.NET Entity Framework。
- 对SQL Server 2008的数据提供程序支持。
- .NET框架客户端配置文件是完整版.NET框架的子集,面向客户端应用程式。这改善了尚未安装.NET框架的电脑上的安装体验。
- 改进Windows Presentation Foundation的性能,其中包括启动速度的位图效果性能的提高。为Windows Presentation Foundation增加的功能包括对业务线应用程式的更好支持、本机闪屏支持、DirectX像素着色器支持以及新的WebBrowser控件。
- ClickOnce应用程式发布者可以根据具体情况决定是否取消签名和散列,开发人员可以以编程方式安装显示自定义署名的ClickOnce应用程式,ClickOnce错误对话框支持指向网络上特定于应用程式的支持站点的链接。
- 用于SQL Server的.NET框架数据提供程序(System.Data.SqlClient)完全支持SQL Server 2008数据库引擎的所有新功能。有关.NET框架对SQL Server 2008的支持的更多资讯,请参见SQL Server中的新功能(ADO.NET)。ADO.NET数据平台是一种多版本策略,它使开发人员能够针对概念性实体数据模型进行编程,从而减轻他们的编码和维护工作。此平台提供了ADO.NET Entity Framework、实体数据模型(EDM)、对象服务、LINQ to Entities、Entity SQL、EntityClient、ADO.NET数据服务及实体数据模型工具。
- Windows Communication Foundation现在提供了改进的互操作性支持,增强了部分信任方案中的调试体验,并扩展了集成协议支持以更广泛地应用于Web 2.0应用程式,从而使DataContract序列化程序更易于使用。
- Microsoft.VisualBasic.PowerPacks命名空间引入了新的DataRepeater控件,该控件以可自定义的列表格式显示数据。此命名空间还包含新的矢量形状。
.NET框架 4.5是.NET框架 4高兼容性的置位更新(in-place update)。搭配C# 或Visual Basic程式设计语言使用.NET框架 4.5,即可编写Windows Store风格的应用程式。.NET框架 4.5可提升性能、可靠度及安全性。于2012年8月15日推出。但请注意,.NET框架 4.5只支持Windows Vista SP2以上版本的操作系统。[13]
- 微软于2016年1月12开始停止对.NET 4.0, 4.5, 4.5.1的安全性更新及技术支持
.NET框架 4.5.1于2013年10月17日随着Visual Studio 2013发布。[14]此版本需要Windows Vista SP2或更新的环境,[15]并且包含在Windows 8.1和Windows Server 2012 R2中。.NET框架 4.5.1的新功能有:[16]
- 调试器支持X64编辑和继续(EnC)
- 调试器支持查看托管返回值
- “Call Stack”和“Task”窗口中的异步感知调试
- 调试器支持分析.NET内存转储(在Visual Studio Ultimate SKU中)
- 适用于Performance 及 Diagnostics中心的.NET开发者工具
- 代码分析UI改进
- ADO.NET空闲连接弹性
.NET框架 4.5.2的发表宣布于2014年5月5日。[17]此版本需要Windows Vista SP2及更新版本。[18]对于Windows Forms应用程式,对高DPI方案进行了改进。对于ASP.NET,可以使用更高可靠性的HTTP开头检查和修改方法,这是一种规划背景异步工作任务的新方法。[17]
.NET框架 4.6 是在2014年11月12月宣布,[19]而在2015年7月20日发行。[20] 它对64位系统支持一个新的即时编译(JIT),称之为 RyuJIT,呈现较佳的性能,并支持SSE2与AVX2指令集。WPF 与 Windows Forms 都获得更新以达成较高的 DPI 情境。支持TLS 1.1 与 TLS 1.2 的功能已经被加入 WCF。[20] 此版本需要Windows Vista SP2 或更新的版本。[21]
.NET框架 4.6.1 发行的消息在2015年11月30日宣布。[22]这个版本需要 Windows 7 SP1 或更新的版本。[21]新的功能与 API 包括:
- WPF改进了拼写检查,支持用户自定义词典,并改进触控性能。
- 增强支持椭圆曲线数码签名算法(ECDSA)X509 认证。
- 当连接Azure SQL数据库时,添加了对AlwaysOn、Always Encrypted的SQL连接,并改进连接开放弹性。
- Azure SQL数据库现在使用更新的System.Transactions API支持分布式处理。
- RyuJIT、GC、WPF和WCF中的许多其他性能、稳定性和可靠性相关修复。
.NET框架 4.6.2 的预览在2016年3月30日宣布,[23]发行日期则为2016年8月2日。[24]此版本需要 Windows 7 SP1 或更新版。[21] New features include:
- 支持超过260个字符的路径
- 支持X.509认证的FIPS 186-3 DSA
- TLS 1.1 / 1.2支持 ClickOnce
- 支持 ASP.NET 数据注释的本地化
- 激活具备 Project Centennial 的 .NET桌面应用程式
- 针对WPF支持软键盘和每个显示器DPI
2017年4月5日,微软宣布 .NET框架 4.7 将被集成到 Windows 10 創意者更新, 承诺为其他Windows版本提供独立安装程序。同日,发行一个 Visual Studio 2017 更新版以加强支持标的物 .NET框架 4.7。[25] 所承诺的 Windows 7 及更新版本独立安装程序在2017年5月2日发行,[26] 但有一些重要成分不包含在内。[27]
.NET框架 4.7 的新功能包括:[28]
.NET框架 4.7.1 在2017年10月17日发行。[29]在修复程序和新功能中,它修正了d3dcompiler依赖性问题。 [30]它还增加了与.NET Standard 2.0开箱即用的兼容性。[31]
.NET框架 4.7.2 在2018年4月30日发行。[32]主要的异动是改进 ASP.NET、BCL、CLR、ClickOnce、Networking、SQL、WCF、Windows Forms、Workflow 及 WPF。[33]
CLR与CLI
.NET的初级组成是CLI(通用语言架构)和CLR(通用语言运行库)。
CLI(通用语言架构)全名为Common Language Infrastructure,是一套运作环境规范,包括一般系统、基础类库和与机器无关的中间代码。CLR则是确认操作密码符合CLI的平台。在通用中间语言(CIL)执行前,CLR必须将指令及时编译转换成原始机器代码。
所有CLI都可经由.NET自我表述。CLR检查元数据以确保正确的方法被调用。元数据通常是由语言编译器生成的,但开发人员也可以通过使用客户属性创建他们自己的元数据。
如果一种语言实现生成了CLI,它也可以通过使用CLR被调用,这样它就可以与任何其他.NET语言生成的资料相交互。CLR也被设计为操作系统无关性。
当一个汇编体被加载时,CLR执行各种各样的测试。其中的两个测试是确认与核查。在确认的时候,CLR检查汇编体是否包含有效的元数据和CIL,并且检查内部表的正确性。核查则不那么精确。核查机制检查代码是否会执行一些“不安全”的操作。核查所使用的算法非常保守,导致有时一些“安全”的代码也通不过核查。不安全的代码只有在汇编体拥有“跳过核查”许可的情况下才会被执行,通常这意味着代码是安装在本地上的。
标准化和著作权
2000年8月,微软、惠普和英特尔共同制定CLI和C#编程语言的标准规格。2001年12月,以上两者通过并成为ECMA标准规格。(ECMA 335(页面存档备份,存于互联网档案馆)和ECMA 334(页面存档备份,存于互联网档案馆))。ISO亦于2003年4月跟随(ISO/IEC 23271(页面存档备份,存于互联网档案馆)和ISO/IEC 23270(页面存档备份,存于互联网档案馆))。
这会有一定的风险,但它可以鼓励标准联合的实现,以提供一座桥梁来把非Windows的软件转变为微软.NET。将此推广为标准的一个团体是国际.NET联合会(INETA)。
尽管微软及其他合作伙伴持有CLI及C#的专利,ECMA和ISO要求所有专利都应该遵守“合理与非歧视准则”。除此之外,这些公司亦同意让用户免费使用这两项专利。
不过,这并不包括.NET框架内并不为ECMA/ISO标准涵盖的范围,这包括了:Windows Forms、ADO.NET及ASP.NET。微软对上述部件所持有的专利,使开发者未必能够为非微软平台开发出一套完整的作品。
2014 年11月13日,微软新任行政总裁萨帝亚·纳德拉决心下,该公司发布的.NET源代码包含了伺服器部分的核心,如.NET Framework Libraries、.NET Core Framework Libraries和RyuJit VM,正式对外开放源代码。[34]
.NET与Java EE
公共语言基础(CLI),通用中间语言(CIL)以及C#与甲骨文公司的Java虚拟机和Java之间有不少的相似之处,因此它们无疑是强烈的竞争者。它们两者都使用它们各自的中间码(在微软,它们叫做通用中间语言,而在Oracle,它们叫字节码)。通用中间语言被设计来即时编译(JIT),而Java的字节码在最初的时候则是设计成用于解释运行,而非即时编译。.NET现在只在Windows上被完美地支持,而Java则可在很多平台上被完好支持。然而,现在一些正在开发中的实现版本例如Mono或者Shared source CLI可以用于在类Unix操作系统例如Linux,FreeBSD和Mac OS X上运行.NET应用程式。甲骨文公司的一个产品,J2EE提供与微软的一些捆绑于Windows中的技术例如COM+(先前的MTS)和MSMQ等效的功能。
Java和.NET可经由IKVM,一个在.NET平台上实现的Java虚拟机作更多的沟通。
Java有其专门的远程程序调用技术RMI(Remote Method Invocation), RMI的另一版本RMI-IIOP更可兼容CORBA。
然而,.NET与Java之间的竞争关系,在.NET Core出现后,一切都改观了。
.NET与COM
前一版软件组件技术由Microsoft所提出的COM,该技术被用来创建大型(large-scale)的软件系统上,使用COM+ 或MTS对于传统分布式组件有强化的作用。当.NET将COM-objects封装成.NET组件以及将.NET组件封装成COM-objects后,Microsoft分别将他命名为Runtime Callable Wrapper(RCW)和COM Callable Wrapper(CCW)。很明显的,Microsoft最终将以.NET全面取代COM成为软件组件的架构。[来源请求]Microsoft希望开发者能够在Win32平台上使用.Net取代COM,而已经存在的服务则透过抽象接口来使用(如:目前交易的.Net组件仍然使用COM+)。
.Net Remoting与XML WebServices
.NET remoting属于行程(process)内沟通的抽象方法。
Microsoft® .NET Remoting提供一个丰富可扩展的框架给存在两个不同AppDomain中的Object,使得在不同行程(行程)和不同机器中能够进行无缝地沟通。.NET Remoting提供一种强大但简单的可编程模型并且在执行阶段支持资料交换。
XML Web services将基础的功能区块布署到网络的不同电脑上。开放标准的通讯协议以及人和应用程式可以透过Web Services集成应用程式的环境来合作。应用程式可以从不同的来源使用多个XML Web Services来建构应用程式而不需要知道他们在哪里以及如何来运作。
.NET的语言
CLI被设计成支持任何面向对象的编程语言,分享共同物件模型与大型共同类别库。.NET支持超过40种编程语言。这些编译器大都是免费的(软件厂商仅开发出售集成开发环境)。
大部分的语言都做了重大改变以搭配.NET框架。厂商通常利用这个机会来同时改变语言的其他特性。
- C#,一个以C++和Java语法为基础开发的一个全新的面向对象语言,是.NET开发的首选语言。
- Visual Basic .NET,一个加强了面向对象支持的,支持多线程的Visual Basic版本。
- C++/CLI,一个C++的.NET平台版本变种。
- JScript .NET,一个编译版本的MicrosoftJScript语言。
- J#,一个对应于Java和J++(微软自己开发的Java变种)的.NET平台版本,但是由于知识产权问题,目前微软公司已经停止其开发应用。
- F#,ML语言家族的一员。
- Microsoft Small Basic
- Ada,参阅A#。
- APL
- Boo,基于Python。
- COBOL
- Component Pascal,基于部件的Pascal,比起Pascal来更接近于Oberon。
- Delphi 8 and Delphi 2005以及现在的delphi xe2都采用.net
- Eiffel
- Forth
- FORTRAN
- IKVM,Java。
- IronPython,基于Python。
- IronRuby,基于Ruby。
- Lexico,基于西班牙语的面向物件编程语言。
- Lisp
- Mercury
- Mondrian为了便于脚本部件编程而开发的功能型语言。
- Nemerle函数式/指令式混合语言。
- Oberon
- Perl
- Phalanger,PHP的.net编译器。
- RPG
- Smalltalk
- TclBridge,基于Tcl。
- PowerBuilder.NET powerbuilder 11.5及以后的版本都采用.net技术,但这种语言目前停止开发了。
ASP.NET是内含于.NET框架中,专门用来发展Web应用程式的一组类别库集。
ADO.NET是内含于.NET框架中,专门处理与资料来源沟通的资料存取类别库集,被Windows Forms与ASP.NET应用程式大量使用,可说是.NET框架中唯一的资料存取接口。
可供选择的实现版本
微软的.NET框架是.NET技术的旗舰级实现版本,在此之外还有一些其他实现版本。
- 微软开发了一个称为共享原始码公共语言基础(Shared Source Common Language Infrastructure,Shared Source CLI;即今ECMA—通用语言架构),是微软的.NET框架(共通语言执行平台)的一个原始码共享的实现架构,可运行于Windows XP,FreeBSD,和Mac OS X10.2。
- Mono是一个开源的.NET运行时和开发库实现版本。Mono现正由xamarin公司和开源软件发展社区负责开发。它正迅速发展成熟,现已经包含了对ASP.NET和ADO.NET的支持,对Windows Forms库的支持也较充分。它提供了一个C#编译器,而一个VB.NET编译器现在也已经处于pre-beta阶段。Mono项目还包含了一些新的库和技术的开发:
- Gtk:一个GTK+GUI工具包的.NET封装。
- xSP:一个用C#编写的支持运行ASP.NET应用程式的网页伺服器软件。
- MonoDevelop:SharpDevelop的一个移植版本,是一个符合GPL标准的面向Gtk#和Mono的.NET集成开发环境。
- Novell.Directory.Ldap类库:Lightweight Directory Access Protocol(LDAP)for .NET的一个免费的实现版本。
- SerialPortNet:Aserial portlibrary for .Net & Mono implementing .NET 2.0 specifications.
- Mono for Android和MonoTouch for iOS:Mono在移动平台Android和iOS上的移植,使开发者可以在Android和iOS平台上使用C#和Mono框架开发应用。Xamarin Forms是这些实现的核心,可以根据系统不同生成符合该系统风格的界面。
- MonoMac:Mono对于一些OS X原生Step API的封装。
参见
参考文献
外部链接
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.