.NET框架

-{zh-hans:.NET框架（.NET Framework）;zh-hant:.NET Framework}-是由微软开发，一个致力于敏捷软体开发（agile software development）、快速应用开发（rapid application development）、平台独立性和网路透明化的软体框架。.NET是微软为2000年代对伺服器和桌上型软体工程迈出的第一步。.NET包含许多有助于互联网和内部网应用迅捷发的技术。
.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 Framework的原始码，并提供给Linux和macOS使用。 微软于2019年4月释出了该框架作为专有软体的最后一个主要版本 .NET Framework 4.8，随后于 2022年8月释出了 4.8.1。从此之后便只有安全性或是稳定性的臭虫修复更新，亦无后续版本改动的计划。.NET Framework 4.8将会持续包含在Windows的更新中接收安全性更新，截至2023年11月为止，并无将其移除的计划。官方推荐后续的新开发改用 .Net 6 起的版本进行开发。
发行历史.
.NET Framework 1.0.
完整版号 - 1.0.3705
这是最早的.NET架构，于2002年发行。它可以以一个独立且可重新分发的包的形式或在一个软体发展工具包集中被获得。它也是第一个微软Visual Studio .NET的发行版的一部分（也被称作Visual Studio .NET 2002）。
.NET Framework 1.1.
完整版号 - 1.1.4322
这是首个主要的.NET框架升级版本，发行于2003年。它可以以一个独立的可重新分发的包的形式或在一个软体发展工具包集中被获得。它也是第二个微软Visual Studio .NET版本的一部分（也被称作Visual Studio .NET 2003）。它也是首个被Windows作业系统-Windows Server 2003所内置的.NET框架版本。
自1.0版本以来的改进：
.NET Framework 2.0.
完整版号 - 2.0.50727.42，发行于2005年10月27日。
.NET Framework 2.0的元件都包含在 Visual Studio 2005和SQL Server 2005里面。通过MSDN Universe版可以免费下载RTM版本。
自1.1版本以来的改进：
.NET Framework 3.0.
发布日期2006/11/21。曾用名「WinFX」。依然使用.NET Framework 2.0版本的公共语言运行库（CLR），并加入了适应未来软体发展方向的4个框架：
.NET Framework 3.5.
这个版本将包含一个支持C#和VB.Net中心的语言特性的编译器，以及对语言整合查询（LINQ, Language-Integrated Query）的支援。该版本随Visual Studio 2008一起发布。
同时，.NET Framework 3.5自动包含.NET Framework 2.0 SP1以及.NET Framework 3.0 SP1，用于为这两个版本提供安全性修复，以及少量新增的类库（如System.DateTimeOffest），此版本提供的新功能有：
.NET Framework 3.5 SP1.
.NET Framework 3.5 SP1自动包含.NET Framework 2.0 SP2以及.NET Framework 3.0 SP2。该版本随Visual Studio 2008 SP1发布，此版本提供了下列的新功能：
.NET Framework 4.5.
.NET Framework 4.5是.NET Framework 4高相容性的置位更新（in-place update）。搭配C# 或Visual Basic程式设计语言使用.NET Framework 4.5，即可编写Windows Store风格的应用程式。.NET Framework 4.5可提升效能、可靠度及安全性。于2012年8月15日推出。但请注意，.NET Framework 4.5只支援Windows Vista SP2以上版本的作业系统。
.NET Framework 4.5.1.
.NET Framework 4.5.1于2013年10月17日随著Visual Studio 2013发布。此版本需要Windows Vista SP2或更新的环境，并且包含在Windows 8.1和Windows Server 2012 R2中。.NET Framework 4.5.1的新功能有：
.NET Framework 4.5.2.
.NET Framework 4.5.2的发表宣布于2014年5月5日。此版本需要Windows Vista SP2及更新版本。对于Windows Forms应用程序，对高DPI方案进行了改进。对于ASP.NET，可以使用更高可靠性的HTTP开头检查和修改方法，这是一种规划背景异步工作任务的新方法。
.NET Framework 4.6.
.NET Framework 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 Framework 4.6.1.
.NET Framework 4.6.1 发行的讯息在2015年11月30日宣布。这个版本需要 Windows 7 SP1 或更新的版本。新的功能与 API 包括：
.NET Framework 4.6.2.
.NET Framework 4.6.2 的预览在2016年3月30日宣布，发行日期则为2016年8月2日。此版本需要 Windows 7 SP1 或更新版。 New features include:
.NET Framework 4.7.
2017年4月5日，微软宣布 .NET Framework 4.7 将被整合到 Windows 10 创作者更新, 承诺为其他Windows版本提供独立安装程式。同日，发行一个 Visual Studio 2017 更新版以加强支援标的物 .NET Framework 4.7。 所承诺的 Windows 7 及更新版本独立安装程式在2017年5月2日发行， 但有一些重要成份不包含在内。
.NET Framework 4.7 的新功能包括：
.NET Framework 4.7.1.
.NET Framework 4.7.1 在2017年10月17日发行。在修复程式和新功能中，它修正了d3dcompiler依赖性问题。 
它还增加了与.NET Standard 2.0开箱即用的相容性。
.NET Framework 4.7.2.
.NET Framework 4.7.2 在2018年4月30日发行。主要的异动是改进 ASP.NET、BCL、CLR、ClickOnce、Networking、SQL、WCF、Windows Forms、Workflow 及 WPF。
CLR与CLI.
.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 Framework内并不为ECMA/ISO标准涵盖的范围，这包括了：Windows Forms、ADO.NET及ASP.NET。微软对上述部件所持有的专利，使开发者未必能够为非微软平台开发出一套完整的作品。
2014 年11月13日，微软新任执行长萨帝亚·纳德拉决心下，该公司释出的.NET原始码包含了伺服器部分的核心，如.NET Framework Libraries、.NET Core Framework Libraries和RyuJit VM，正式对外开放原始码。
.NET与Java EE.
公共语言基础（CLI），通用中间语言（CIL）以及C#与甲骨文公司的Java虚拟机和Java之间有不少的相似之处，因此它们无疑是强烈的竞争者。它们两者都使用它们各自的中间码（在微软，它们叫做通用中间语言，而在Oracle，它们叫位元组码）。通用中间语言被设计来即时编译（JIT），而Java的位元组码在最初的时候则是设计成用于解释运行，而非即时编译。.NET现在只在Windows上被完美地支持，而Java则可在很多平台上被完好支持。然而，现在一些正在开发中的实现版本例如Mono或者可以用于在类Unix作业系统例如Linux，FreeBSD和Mac OS X上运行.NET应用程式。甲骨文公司的一个产品，J2EE提供与微软的一些捆绑于Windows中的技术例如COM+（先前的MTS）和MSMQ等效的功能。
Java和.NET可经由，一个在.NET平台上实作的Java虚拟机作更多的沟通。
Java有其专门的远端程式呼叫技术RMI（Remote Method Invocation）, RMI的另一版本更可相容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 Framework。厂商通常利用这个机会来同时改变语言的其他特性。
ASP.NET & ADO.NET.
ASP.NET是内含于.NET Framework中，专门用来发展Web应用程式的一组类别库集。
ADO.NET是内含于.NET Framework中，专门处理与资料来源沟通的资料存取类别库集，被Windows Forms与ASP.NET应用程式大量使用，可说是.NET Framework中唯一的资料存取介面。
可供选择的实现版本.
微软的.NET Framework是.NET技术的旗舰级实现版本，在此之外还有一些其他实现版本。