.NET框架(英語:.NET Framework)是由微软开发,一个致力于敏捷软件开发(agile software development)、快速应用开发(rapid application development)、平台无关性和网络透明化的软件框架。.NET是微软为2000年代对服务器和桌面型软件工程迈出的第一步。.NET包含许多有助于互联网和内部网应用迅捷开发的技术。
.NET框架是微软公司继Windows DNA之后的新开发平台。.NET框架是以一种采用系统虚拟机运行的编程平台,以通用语言运行库(Common Language Runtime)为基础,支持多种语言(C#、F#、VB.NET、C++、Python等)的开发。
.NET也为应用程序接口(API)提供了新功能和开发工具。这些革新使得程序设计员可以同时进行Windows应用软件和网络应用软件以及组件和服务(web服务)的开发。.NET提供了一个新的反射性的且面向对象编程编程接口。.NET设计得足够通用化从而使许多不同高级语言都得以被汇集。
甲骨文公司的Java编程语言和Java平台企业版技术是.NET平台的竞争对手之一。
2014年11月12日,微软宣布将完全开放.NET框架的源代码,并提供给Linux和macOS使用。
完整版号 - 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版本以来的改进:
完整版号 - 2.0.50727.42,发行于2005年10月27日。
.NET框架 2.0的组件都包含在 Visual Studio 2005和SQL Server 2005里面。通过MSDN Universe版可以免费下载RTM版本。
自1.1版本以来的改进:
发布日期2006/11/21。曾用名“WinFX”。依然使用.NET框架 2.0版本的公共语言运行库(CLR),并加入了适应未来软件发展方向的4个框架:
这个版本将包含一个支持C#和VB.Net中心的语言特性的编译器,以及对语言集成查询(LINQ, Language-Integrated Query)的支持。该版本随Visual Studio 2008一起发布。
同时,.NET框架 3.5自动包含.NET框架 2.0 SP1以及.NET框架 3.0 SP1,用于为这两个版本提供安全性修复,以及少量新增的类库(如System.DateTimeOffest),此版本提供的新功能有:
.NET框架 3.5 SP1自动包含.NET框架 2.0 SP2以及.NET框架 3.0 SP2。该版本随Visual Studio 2008 SP1发布,此版本提供了下列的新功能:
.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以上版本的操作系统。
.NET框架 4.5.1于2013年10月17日随着Visual Studio 2013发布。此版本需要Windows Vista SP2或更新的环境,并且包含在Windows 8.1和Windows Server 2012 R2中。.NET框架 4.5.1的新功能有:
.NET框架 4.5.2的发表宣布于2014年5月5日。此版本需要Windows Vista SP2及更新版本。对于Windows Forms应用程序,对高DPI方案进行了改进。对于ASP.NET,可以使用更高可靠性的HTTP开头检查和修改方法,这是一种规划背景异步工作任务的新方法。
.NET框架 4.6 是在2014年11月12月宣布,而在2015年7月20日发行。 它对64位系统支持一个新的即时编译(JIT),称之为 RyuJIT,呈现较佳的性能,并支持SSE2与AVX2指令集。WPF 与 Windows Forms 都获得更新以达成较高的 DPI 情境。支持TLS 1.1 与 TLS 1.2 的功能已经被加入 WCF。 此版本需要Windows Vista SP2 或更新的版本。
.NET框架 4.6.1 发行的消息在2015年11月30日宣布。这个版本需要 Windows 7 SP1 或更新的版本。新的功能与 API 包括:
.NET框架 4.6.2 的预览在2016年3月30日宣布,发行日期则为2016年8月2日。此版本需要 Windows 7 SP1 或更新版。 New features include:
2017年4月5日,微软宣布 .NET框架 4.7 将被集成到 Windows 10 創意者更新, 承诺为其他Windows版本提供独立安装程序。同日,发行一个 Visual Studio 2017 更新版以加强支持标的物 .NET框架 4.7。 所承诺的 Windows 7 及更新版本独立安装程序在2017年5月2日发行, 但有一些重要成分不包含在内。
.NET框架 4.7 的新功能包括:
.NET框架 4.7.1 在2017年10月17日发行。在修复程序和新功能中,它修正了d3dcompiler依赖性问题。 它还增加了与.NET Standard 2.0开箱即用的兼容性。
.NET框架 4.7.2 在2018年4月30日发行。主要的异动是改进 ASP.NET、BCL、CLR、ClickOnce、Networking、SQL、WCF、Windows Forms、Workflow 及 WPF。
.NET的初级组成是CLI和CLR。CLI是一套运作环境规范,包括一般系统、基础类库和与机器无关的中间代码,全称为Common Language Infrastructure。CLR则是确认操作密码符合CLI的平台。在通用中间语言(CIL)运行前,CLR必须将指令及时编译转换成原始机器代码。
所有CLI都可经由.NET自我表述。CLR检查元数据以确保正确的方法被调用。元数据通常是由语言编译器生成的,但开发人员也可以通过使用客户属性创建他们自己的元数据。
如果一种语言实现生成了CLI,它也可以通过使用CLR被调用,这样它就可以与任何其他.NET语言生成的数据相交互。CLR也被设计为操作系统无关性。
当一个汇编体被加载时,CLR运行各种各样的测试。其中的两个测试是确认与核查。在确认的时候,CLR检查汇编体是否包含有效的元数据和CIL,并且检查内部表的正确性。核查则不那么精确。核查机制检查代码是否会运行一些“不安全”的操作。核查所使用的算法非常保守,导致有时一些“安全”的代码也通不过核查。不安全的代码只有在汇编体拥有“跳过核查”许可的情况下才会被运行,通常这意味着代码是安装在本地上的。
通过.NET,你可以用SOAP和不同的web服务进行交互。
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,正式对外开放源代码。
公共语言基础(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出现后,一切都改观了。
前一版软件组件技术由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属于行程(process)内沟通的抽象方法。
Microsoft® .NET Remoting提供一个丰富可扩展的框架给存在两个不同AppDomain中的Object,使得在不同行程(行程)和不同机器中能够进行无缝地沟通。.NET Remoting提供一种强大但简单的可编程模型并且在运行阶段支持数据交换。
XML Web services将基础的功能区块布署到网络的不同电脑上。开放标准的通信协议以及人和应用程序可以透过Web Services集成应用程序的环境来合作。应用程序可以从不同的来源使用多个XML Web Services来建构应用程序而不需要知道他们在哪里以及如何来运作。
CLI被设计成支持任何面向对象的编程语言,分享共同对象模型与大型共同类别库。.NET支持超过40种编程语言。这些编译器大都是免费的(软件厂商仅开发出售集成开发环境)。
大部分的语言都做了重大改变以搭配.NET框架。厂商通常利用这个机会来同时改变语言的其他特性。
ASP.NET是内含于.NET框架中,专门用来发展Web应用程序的一组类别库集。
ADO.NET是内含于.NET框架中,专门处理与数据源沟通的数据访问类别库集,被Windows Forms与ASP.NET应用程序大量使用,可说是.NET框架中唯一的数据访问接口。
微软的.NET框架是.NET技术的旗舰级实现版本,在此之外还有一些其他实现版本。