.NET框架

-{zh-hans:.NET框架（）;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. 自SP1起所有Windows XP分发光碟或镜像中均包含1.0版的安装包，并且這個版本作為Windows XP Tablet PC和Media Center版的必要組成元素。
1. .Net Framework 1.1 可以部署於Itanium和x86-64平台， 由WOW64支援。
2. 在Itanium平台上有些功能不被支援，比如WPF。
3. 從版本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 <T>，做為延遲初始化時使用。
新增大整數的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 

.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与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编译到通用中间语言的编译器。

參見 

 C#
 VB.NET
 ASP.NET
 AJAX
 COM Interop
 Windows API
 .NET Compact Framework
 .NET Micro Framework

参考文献

外部链接 
 
 Overview of .NET Framework (MSDN)
 .NET Framework 概述
 .NET Framework 的概觀
 .NET Github repository

 
微軟開發工具
微軟API