.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 起的版本進行開發。

**版本**
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 (RemObjects BASIC programming language)- 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)date=20161231073549 
**  .NET Framework 概述date=20181227230308 
**  .NET Framework 的概觀date=20181227230200 -  .NET Github repositorydate=20181229071948