【.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使用。
== 版本 ==
0.none 自SP1起所有Windows XP分发光碟或镜像中均包含1.0版的安装包，并且这个版本作为Windows XP Tablet PC和Media Center版的必要组成元素。
1.none .Net Framework 1.1 可以部署于Itanium和x86-64平台， 由WOW64支援。
2.none 在Itanium平台上有些功能不被支援，比如WPF。
3.none 从版本4.5起，随同Windows RT, Windows RT 8.1运用于ARM v7平台，由于是精简版，未列于此表。
== 发行历史 ==
=== .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版本以来的改进：
* 内建了对mobile ASP.NET控制项的支援。这在1.0版本是以附加功能方式实现的，现在已经集成到框架的内部。
* 安全方面的变更 - 使得Windows表单代码以可靠的行为执行，从而可以在Internet环境内安全运行，并且加入了ASP.NET应用程式的代码安全访问功能。
* 内建了对ODBC和Oracle资料库的支援。这在1.0版本是以附加功能方式实现的，现在已经集成到框架的内部。
* .NET Compact Framework- 这是一个用于智慧设备（例如Pocket PC或者SmartPhone）的.NET框架的子集。
* 对IPv6的支持。
* 大量的API变更。
=== .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版本以来的改进：
* 大量的API变更。
* 新的API让需要管理.NET运行库实例的非.NET的应用程式可以做到这点。这个新的API对.NET运行库的各种功能，包括：多线程、记忆体分配、代码载入等，提供了很好的控制。它最初是为Microsoft SQL Server能够有效率的使用.NET运行库而设计的，因为Microsoft SQL Server拥有它自己的日程管理器和记忆体管理器。
=== .NET Framework 3.0 ===
发布日期2006/11/21。曾用名「WinFX」。依然使用.NET Framework 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。
=== .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），此版本提供的新功能有：
* 扩展方法（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 Framework 3.5基类库（BCL）中的新类可满足许多常见的客户请求。
==== .NET Framework 3.5 SP1 ====
.NET Framework 3.5 SP1自动包含.NET Framework 2.0 SP2以及.NET Framework 3.0 SP2。该版本随Visual Studio 2008 SP1发布，此版本提供了下列的新功能：
* 新增的ASP.NET功能包括ASP.NET动态数据和ASP.NET AJAX附加功能，前者提供了无需编写代码就可实现数据驱动的快速开发的丰富支架框架，后者为管理浏览器历史记录提供了支持（后退按钮支持）。
* ADO.NET Entity Framework。
* 对SQL Server 2008的数据提供程序支持。
* .NET Framework客户端配置文件是完整版.NET Framework的子集，面向客户端应用程序。这改善了尚未安装.NET Framework的计算机上的安装体验。
* 改进Windows Presentation Foundation的性能，其中包括启动速度的位图效果性能的提高。为Windows Presentation Foundation增加的功能包括对业务线应用程序的更好支持、本机闪屏支持、DirectX像素着色器支持以及新的WebBrowser控件。
* ClickOnce应用程序发布者可以根据具体情况决定是否取消签名和散列，开发人员可以以编程方式安装显示自定义署名的ClickOnce应用程序，ClickOnce错误对话框支持指向网络上特定于应用程序的支持站点的链接。
* 用于SQL Server的.NET Framework数据提供程序（System.Data.SqlClient）完全支持SQL Server 2008数据库引擎的所有新功能。有关.NET Framework对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 Framework 4.0 ===
*.NET Framework 4.0主要增加了并行支持，英文版于2010年4月12日推出。
*新增System.Lazy ，做为延迟初始化时使用。
*新增大整数的System.Numerics.BigInteger与复数的System.Numerics.Complex（使用时需加入参考System.Numerics.dll）
*微软于2016年1月12开始停止对.NET 4.0, 4.5, 4.5.1的安全性更新及技术支援
=== .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以上版本的作业系统。
*微软于2016年1月12开始停止对.NET 4.0, 4.5, 4.5.1的安全性更新及技术支援
==== .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的新功能有：
* 侦错器支持X64编辑和继续（EnC）
* 侦错器支持查看托管返回值
* “Call Stack”和“Task”视窗中的异步感知侦错
* 侦错器支持分析.NET内存转储（在Visual Studio Ultimate SKU中）
* 适用于Performance 及 Diagnostics中心的.NET开发者工具
* 代码分析UI改进
* ADO.NET空闲连接弹性
==== .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 包括：
* WPF改进了拼写检查，支援用户自定义词典，并改进触控性能。
* 增强支援椭圆曲线数字签名算法（ECDSA）X509 认证。
* 当连接Azure SQL数据库时，添加了对AlwaysOn、Always Encrypted的SQL连接，并改进连接开放弹性。
* Azure SQL数据库现在使用更新的System.Transactions API支援分散式处理。
* RyuJIT、GC、WPF和WCF中的许多其他性能、稳定性和可靠性相关修复。
==== .NET Framework 4.6.2====
.NET Framework 4.6.2 的预览在2016年3月30日宣布，发行日期则为2016年8月2日。此版本需要 Windows 7 SP1 或更新版。 New features include:
* 支援超过260个字符的路径
* 支援X.509认证的FIPS 186-3 DSA
* TLS 1.1 / 1.2支援 ClickOnce
* 支援 ASP.NET 数据注释的本地化
* 启用具备 Project Centennial 的 .NET桌面应用程序
* 针对WPF支援软键盘和每个监视器DPI
=== .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 的新功能包括：
* 使用椭圆曲线密码学的增强加密
* 改进对传输层安全性协定（TLS）的支援，尤其是对于1.2版
* 支援Windows Forms 的高DPI感知支援
* 在 WPF 中对触控和手写的更多支援
* WPF 的新印表 API
==== .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 ==
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 335date=20130629235609 和 ECMA 334date=20101031042906 ）。ISO亦于2003年4月跟随（ ISO/IEC 23271date=20070224200941 和 ISO/IEC 23270date=20061209020242 ）。
这会有一定的风险，但它可以鼓励标准联合的实现，以提供一座桥梁来把非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或者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 Framework。厂商通常利用这个机会来同时改变语言的其他特性。
=== 微软开发的.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
=== 第三方使用.NET的编程语言 ===
* 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 & ADO.NET ===
ASP.NET是内含于.NET Framework中，专门用来发展Web应用程式的一组类别库集。
ADO.NET是内含于.NET Framework中，专门处理与资料来源沟通的资料存取类别库集，被Windows Forms与ASP.NET应用程式大量使用，可说是.NET Framework中唯一的资料存取介面。
== 可供选择的实现版本 ==
微软的.NET Framework是.NET技术的旗舰级实现版本，在此之外还有一些其他实现版本。
* .NET Core 是微软开发的跨平台 (Windows、Mac OSX、Linux) 的应用程式开发框架（Application Framework）
* 微软开发了一个称为共享源码公共语言基础（Shared Source Common Language Infrastructure，Shared Source CLI；即今ECMA—通用语言架构），是微软的.NET Framework（共通语言执行平台）的一个源码共用的实现架构，可运行于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的封装。
* Portable.NET不及Mono成熟，这得归因于Portable.NET并不是在最初的时候就使用了微软的开发框架。提供了一个可以从C编译到通用中间语言的编译器。