請(qǐng)注意,.NET框架4引入了一個(gè)改進(jìn)的安全模式。有關(guān)該內(nèi)容的更多的信息,請(qǐng)參閱文章《.NET框架4中的安全變化》。
具體來(lái)說(shuō),本文中將介紹.NET框架4的如下一些新功能和改進(jìn)特征:
應(yīng)用程序兼容性和部署
內(nèi)核新功能及改進(jìn)
托管擴(kuò)展框架
并行計(jì)算
網(wǎng)絡(luò)編程
Web開(kāi)發(fā)
客戶端開(kāi)發(fā)
數(shù)據(jù)
通信和工作流
一、應(yīng)用程序兼容性和部署
除了一些在安全、標(biāo)準(zhǔn)遵從、正確性、可靠性及性能等方面的改進(jìn)之外,.NET框架4與基于早期.NET框架版本構(gòu)建的應(yīng)用程序高度兼容。
.NET框架4并不會(huì)自動(dòng)使用當(dāng)前版本的公共語(yǔ)言運(yùn)行庫(kù)來(lái)運(yùn)行使用早期版本的.NET框架構(gòu)建的應(yīng)用程序。為了在.NET框架4下運(yùn)行以前的應(yīng)用程序,你必須使用在您的Visual Studio項(xiàng)目的屬性中指定的目標(biāo).NET框架版本重新編譯您的應(yīng)用程序,或者在應(yīng)用程序的配置文件中使用元素來(lái)指定支持的運(yùn)行時(shí)刻庫(kù)。
如果安裝.NET框架4后您的應(yīng)用程序或組件無(wú)法工作,請(qǐng)?jiān)谖④浡?lián)系網(wǎng)站提交一份錯(cuò)誤報(bào)告。您可以如在《.NET框架4應(yīng)用程序兼容性》中所描述的那樣進(jìn)行兼容性測(cè)試,并參考文章《演練:Visual Studio 2010和.NET框架4》來(lái)了解有關(guān)新的功能。有關(guān)其他信息及已知的遷移問(wèn)題,可以訪問(wèn)博客《.NET框架兼容性》。
以下各小節(jié)將描述應(yīng)用部署方面的改善。
(一)客戶配置
.NET框架4的客戶配置支持比以前的版本更多的平臺(tái),并為您的 Windows Presentation Foundation(WPF)、控制臺(tái)或Windows窗體應(yīng)用程序提供快速的部署體驗(yàn)。有關(guān)該內(nèi)容的更多的信息,請(qǐng)參閱文章《.NET框架客戶端配置》。
(二)進(jìn)程內(nèi)并行執(zhí)行
此功能能夠使應(yīng)用程序在同一進(jìn)程中加載和啟動(dòng).NET框架的多個(gè)版本。例如,您可以在同一進(jìn)程中運(yùn)行加載插件(或組件)的應(yīng)用程序,程序本身基于.NET框架 2.0 SP1而插件基于.NET框架4。更早一些的組件將繼續(xù)使用早的.NET框架版本,而新的組件使用新的.NET框架版本。有關(guān)該內(nèi)容的更多的信息,請(qǐng)參考文章《進(jìn)程內(nèi)并行執(zhí)行》。
二、內(nèi)核新功能及改進(jìn)
以下各小節(jié)將描述公共語(yǔ)言運(yùn)行時(shí)刻庫(kù)和基礎(chǔ)類(lèi)庫(kù)所提供的新功能和改進(jìn)特征。
(一)診斷和性能
早期版本的.NET框架并沒(méi)有提供一種方法來(lái)確定一個(gè)特定的應(yīng)用程序域是否正在影響其他應(yīng)用程序域,因?yàn)椴僮飨到y(tǒng)的API及相關(guān)工具(如 Windows任務(wù)管理器)都被精確設(shè)計(jì)到進(jìn)程級(jí)。從.NET框架4開(kāi)始,你可以在每一個(gè)應(yīng)用程序域中獲取處理器及內(nèi)存的使用估測(cè)信息。
您可以監(jiān)控每一個(gè)應(yīng)用程序域的CPU和內(nèi)存使用情況。可以通過(guò)托管和本機(jī)宿主API以及Windows事件跟蹤(ETW)來(lái)進(jìn)行應(yīng)用程序域資源的監(jiān)控。當(dāng)啟用此功能后,它能夠在進(jìn)程的整個(gè)生命周期過(guò)程中收集所有應(yīng)用程序域的統(tǒng)計(jì)信息。有關(guān)此主題,你也可以參考新屬性AppDomain.MonitoringIsEnabled的介紹。
現(xiàn)在,您可以為了診斷目的而訪問(wèn)ETW事件以提高性能。有關(guān)該內(nèi)容的更多的信息,請(qǐng)參閱文章《CLR ETW事件》和《控制.NET框架日志》,還可以參考文章《性能計(jì)數(shù)器和進(jìn)程內(nèi)并行應(yīng)用》。
最后,System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute 屬性能夠支持在托管代碼中處理顯示崩潰的進(jìn)程狀態(tài)的異常。
(二)垃圾收集
.NET框架4支持后臺(tái)垃圾收集。此功能取代了以前版本中的并行垃圾收集,從而提供更好的系統(tǒng)性能。有關(guān)該內(nèi)容的更多的信息,請(qǐng)參閱文章《垃圾收集基礎(chǔ)》。
(三)代碼契約
代碼契約功能允許你指定那些僅通過(guò)方法或類(lèi)型的簽名尚不能描述的契約信息。新命名空間System.Diagnostics.Contracts中包含的類(lèi)提供了一種獨(dú)立于語(yǔ)言的方法并使用前置條件、后置條件和對(duì)象不變量等形式來(lái)表達(dá)編碼假設(shè)。這些契約通過(guò)運(yùn)行時(shí)檢查能夠改進(jìn)測(cè)試,支持靜態(tài)契約校驗(yàn),并支持文檔生成。有關(guān)該內(nèi)容的更多的信息,請(qǐng)參見(jiàn)《代碼契約》。
(四)僅使用設(shè)計(jì)時(shí)互操作程序集
如今,你不再需要攜帶主互操作程序集(PIA)來(lái)部署與COM對(duì)象互操作的應(yīng)用程序。在.NET框架4中,編譯器可以從互操作程序集中嵌入類(lèi)型信息,而且能夠僅選擇那些應(yīng)用程序(例如,一個(gè)插件)實(shí)際使用的類(lèi)型。類(lèi)型安全由公共語(yǔ)言運(yùn)行時(shí)來(lái)保障。有關(guān)信息,請(qǐng)參閱文章《在托管代碼中使用COM類(lèi)型》和《演練:從微軟 Office程序集中嵌入類(lèi)型信息(C#和Visual Basic)》。
(五)動(dòng)態(tài)語(yǔ)言運(yùn)行時(shí)
動(dòng)態(tài)語(yǔ)言運(yùn)行時(shí) (DLR)是一個(gè)新的運(yùn)行時(shí)環(huán)境,它把一組針對(duì)動(dòng)態(tài)語(yǔ)言的服務(wù)添加到CLR中。DLR使開(kāi)發(fā)運(yùn)行于.NET框架上的動(dòng)態(tài)語(yǔ)言更加容易,而且有利于把動(dòng)態(tài)特性添加到靜態(tài)類(lèi)型的語(yǔ)言中。為了支持DLR,.NET框架中添加了一個(gè)新的命名空間System.Dynamic。
通過(guò)引入新的描述控制流的類(lèi)型,例如System.Linq.Expressions.LoopExpression和 System.Linq.Expressions.TryExpression,表達(dá)式樹(shù)功能被進(jìn)一步擴(kuò)展。注意,這些新的類(lèi)型僅為動(dòng)態(tài)語(yǔ)言運(yùn)行時(shí) (DLR)所使用,而不能夠由LINQ使用。
此外,還有一些支持.NET框架基礎(chǔ)設(shè)施的新類(lèi)被添加到 System.Runtime.CompilerServices命名空間中。有關(guān)該內(nèi)容的更多的信息,請(qǐng)參見(jiàn)文章《動(dòng)態(tài)語(yǔ)言運(yùn)行時(shí)概述》。
(六)協(xié)變與反變
有幾種泛型接口和委托現(xiàn)在支持協(xié)變與反變功能。有關(guān)該內(nèi)容的更多的信息,請(qǐng)參見(jiàn)《泛型中的協(xié)變與反變》。
(七)BigInteger和復(fù)數(shù)
新的System.Numerics.BigInteger結(jié)構(gòu)是一個(gè)任意精度的整數(shù)數(shù)據(jù)類(lèi)型,它支持所有標(biāo)準(zhǔn)的整數(shù)運(yùn)算,其中包括位操作。BigInteger可以用于任何.NET框架語(yǔ)言中。此外,一些新的.NET框架語(yǔ)言(如F#和 IronPython)都已內(nèi)置了對(duì)此結(jié)構(gòu)的支持。
新的System.Numerics.Complex結(jié)構(gòu)用于描述一個(gè)復(fù)數(shù),而且支持復(fù)數(shù)的算術(shù)運(yùn)算和三角運(yùn)算。
(八)元組
.NET框架4引入了System.Tuple類(lèi),用于創(chuàng)建包含結(jié)構(gòu)化數(shù)據(jù)的元組對(duì)象。另外,還提供了泛型元組類(lèi)以便支持具有1至8個(gè)組件的元組。為了支持有9個(gè)或更多組件的元組對(duì)象,提供了一個(gè)泛型元組類(lèi),此類(lèi)使用7個(gè)類(lèi)型參數(shù),而第8個(gè)參數(shù)可以是任何的元組類(lèi)型。
(九)文件系統(tǒng)枚舉功能方面的改進(jìn)
.NET框架4又增加了新的文件枚舉方法,從而進(jìn)一步提高訪問(wèn)巨型文件目錄或遍歷大文件的應(yīng)用程序的性能。有關(guān)該內(nèi)容的更多的信息,請(qǐng)參見(jiàn)文章《如何:枚舉目錄和文件》。
(十)內(nèi)存映射文件
.NET框架現(xiàn)在支持內(nèi)存映射文件。你可以使用內(nèi)存映射文件來(lái)編輯非常大的文件,還可以為進(jìn)程間通信創(chuàng)建共享內(nèi)存。
(十一)64位操作系統(tǒng)與進(jìn)程
您可以使用Environment.Is64BitOperatingSystem和 Environment.Is64BitProcess屬性來(lái)標(biāo)識(shí)64位的操作系統(tǒng)和進(jìn)程。
當(dāng)你打開(kāi)基鍵時(shí),您可以使用 Microsoft.Win32.RegistryView枚舉來(lái)指定一個(gè)32位或64位的注冊(cè)表視圖。
(十二)其他新功能
以下列表描述了公共語(yǔ)言運(yùn)行庫(kù)和基礎(chǔ)類(lèi)庫(kù)其他方面的新功能、改進(jìn)和便利之處。其中的一些功能是基于客戶建議提供的。
為了支持文化敏感型格式,System.TimeSpan結(jié)構(gòu)包括了對(duì)于ToString、Parse和TryParse方法的新的重載,還有對(duì)ParseExact和 TryParseExact方法的新的重載。
新的String.IsNullOrWhiteSpace方法能夠確定一個(gè)字符串是 null,空串,還是只包含空白字符。新增加了對(duì)String.Concat和String.Join方法的重載,這兩個(gè)重載方法能夠串聯(lián) System.Collections.Generic.IEnumerable集合中的成員。
String.Concat方法能夠使讓您串連一個(gè)可枚舉集合中的每一個(gè)元素,而不必預(yù)先把這些元素轉(zhuǎn)換為字符串。
又增加了兩個(gè)新的更方便的方法:StringBuilder.Clear和Stopwatch.Restart。
新的Enum.HasFlag方法可以確定是設(shè)置一個(gè)枚舉值中的一位還是多位域(標(biāo)志)。Enum.TryParse方法返回一個(gè)布爾值,用于指示是否成功地解析了一個(gè)字符串或整數(shù)。
System.Environment.SpecialFolder枚舉中包含了幾個(gè)新的文件夾。
現(xiàn)在,您可以使用從 System.IO.Stream類(lèi)繼承的類(lèi)中的CopyTo方法輕松地把一個(gè)流復(fù)制到另一個(gè)流中。
新的重載的 Path.Combine方法能夠使您合并多個(gè)文件路徑。
新的System.IObservable<(Of <(T>)>)和System.IObserver<(Of <(T>)>)接口提供了一種更一般化的機(jī)制用于基于推技術(shù)的通知。
System.IntPtr和 System.UIntPtr類(lèi)現(xiàn)在包括了對(duì)加法和減法運(yùn)算符的支持。
現(xiàn)在,您可以通過(guò)把類(lèi)型包裝在一個(gè) System.Lazy<(Of <(T>類(lèi)中來(lái)實(shí)現(xiàn)對(duì)任何自定義類(lèi)型的延遲初始化。
新的 System.Collections.Generic.SortedSet類(lèi)提供了一棵自我平衡樹(shù),它能夠在插入、刪除和搜索數(shù)據(jù)后維護(hù)數(shù)據(jù)的排列順序。這個(gè)類(lèi)實(shí)現(xiàn)了新的System.Collections.Generic.ISet接口。
針對(duì) System.IO.Compression.DeflateStream和System.IO.Compression.GZipStream類(lèi)的壓縮算法得到進(jìn)一步的改進(jìn),以便使已壓縮的數(shù)據(jù)不再膨脹。此外,還取消了對(duì)壓縮流的4G大小的限制。
新的重載的 Monitor.Enter(Object, Boolean)方法中可以使用一個(gè)布爾類(lèi)型的引用,只有當(dāng)監(jiān)視器成功地進(jìn)入時(shí)此變量才被自動(dòng)設(shè)置為true。
您可以使用 Thread.Yield方法讓調(diào)用線程把當(dāng)前執(zhí)行上下文讓給另一個(gè)已準(zhǔn)備好在當(dāng)前處理器上運(yùn)行的線程。
System.Guid結(jié)構(gòu)現(xiàn)在包含了TryParse和TryParseExact方法。
新的Microsoft.Win32.RegistryOptions枚舉可以讓你指定一個(gè)不穩(wěn)定的注冊(cè)表項(xiàng),此項(xiàng)在計(jì)算機(jī)重新啟動(dòng)后便不再存在。
注冊(cè)表項(xiàng)不再限制為255個(gè)字符的最大長(zhǎng)度。
三、托管擴(kuò)展框架
托管擴(kuò)展性框架(MEF)是.NET框架4中的一個(gè)新庫(kù),幫助您構(gòu)建可擴(kuò)展的和可組合式應(yīng)用程序。MEF可以讓您指定在一個(gè)應(yīng)用程序中的擴(kuò)展點(diǎn),給其他擴(kuò)展的應(yīng)用程序提供服務(wù),以及創(chuàng)建可擴(kuò)展應(yīng)用程序所使用的部件等。MEF還支持很容易地基于元數(shù)據(jù)搜索到可用的部件,而無(wú)需為這些部件加載相應(yīng)的程序集。有關(guān)該內(nèi)容的更多的信息,請(qǐng)參閱《托管可擴(kuò)展框架》。有關(guān)MEF類(lèi)型的列表,你可以參閱System.ComponentModel.Composition命名空間。
四、并行計(jì)算
.NET框架 4針對(duì)編寫(xiě)多線程和異步代碼引入了一個(gè)新的編程模式,從而極大地簡(jiǎn)化了應(yīng)用程序和庫(kù)開(kāi)發(fā)者的編程。此新的模式可以使開(kāi)發(fā)人員以一種自然的方式來(lái)編寫(xiě)高效的,良好粒度的,可擴(kuò)展的并行代碼,而不必直接使用線程或線程池等。新的System.Threading.Tasks命名空間和其他相關(guān)類(lèi)型支持這種新模式。并行LINQ(PLINQ),作為L(zhǎng)INQ to Objects的一種并行實(shí)現(xiàn),能夠通過(guò)聲明性語(yǔ)法支持類(lèi)似的功能。有關(guān)該內(nèi)容的更多的信息,請(qǐng)參閱《.NET框架并行程序設(shè)計(jì)》。
五、網(wǎng)絡(luò)編程
網(wǎng)絡(luò)編程方面的改進(jìn)包括以下內(nèi)容:
針對(duì)Windows身份驗(yàn)證的安全改進(jìn)體現(xiàn)在幾個(gè)類(lèi)中,包括 System.Net.HttpWebRequest,System.Net.HttpListener,System.Net.Mail.SmtpClient,System.Net.Security.SslStream 和 System.Net.Security.NegotiateStream。在Windows 7和Windows Server 2008 R2中運(yùn)行的應(yīng)用程序可以使用擴(kuò)展保護(hù)功能。有關(guān)該內(nèi)容的更多的信息,請(qǐng)參閱《使用擴(kuò)展保護(hù)集成Windows身份驗(yàn)證》。
支持使用 IPv6和Teredo進(jìn)行網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)遍歷。有關(guān)該內(nèi)容的更多的信息,請(qǐng)參閱《使用IPv6和Teredo實(shí)現(xiàn)NAT遍歷》。
新的網(wǎng)絡(luò)性能計(jì)數(shù)器能夠提供有關(guān)HttpWebRequest對(duì)象的信息。有關(guān)該內(nèi)容的更多的信息,請(qǐng)參閱《網(wǎng)絡(luò)性能計(jì)數(shù)器》。
在 System.Net.HttpWebRequest類(lèi)中,通過(guò)重載AddRange方法支持使用64位頭部結(jié)構(gòu)。在 System.Net.HttpWebRequest類(lèi)中定義的新的屬性允許一個(gè)應(yīng)用程序設(shè)置很多HTTP頭部。您可以使用Host屬性設(shè)置一個(gè)HTTP 請(qǐng)求中的獨(dú)立于請(qǐng)求URI的頭部值。
提供針對(duì)System.Net.Mail.SmtpClient和相關(guān)類(lèi)的安全套接字層(SSL) 支持。
提供在System.Net.Mail.MailMessage類(lèi)中的針對(duì)郵件頭部的改進(jìn)支持。
支持在一個(gè)加密中使用空密碼。您可以使用System.Net.ServicePointManager類(lèi)和EncryptionPolicy屬性來(lái)指定加密策略。 System.Net.Security.SslStream類(lèi)的構(gòu)造函數(shù)現(xiàn)在使用一個(gè) System.Net.Security.EncryptionPolicy類(lèi)作為參數(shù)。
為基于密碼的身份驗(yàn)證模式,如在 System.Net.NetworkCredential類(lèi)中定義的基本型(Basic),摘要式(Digest),NTLM和Kerberos身份驗(yàn)證等模式,提供證書(shū)支持。為了提高安全性,現(xiàn)在可以把密碼視為System.Security.SecureString類(lèi)的實(shí)現(xiàn),而不是簡(jiǎn)單的 System.String類(lèi)的實(shí)例。
現(xiàn)在,能夠指定如何在System.URI和System.Net.HttpListener類(lèi)中使用百分比編碼值來(lái)轉(zhuǎn)換和規(guī)范化一個(gè)URI。有關(guān)的詳細(xì)信息,請(qǐng)參閱 System.Net.Configuration.HttpListenerElement,System.Configuratio.SchemeSettingElement,System.Configuration.SchemeSettingElementCollection 和System.Configuration.UriSection等幾個(gè)類(lèi)。
六、Web開(kāi)發(fā)
ASP.NET版本4在以下幾個(gè)方面引入了一些新特點(diǎn):
核心服務(wù),包括一個(gè)新的允許您擴(kuò)展緩存的API,支持壓縮會(huì)話狀態(tài)數(shù)據(jù)和一個(gè)新的應(yīng)用程序預(yù)加載管理器(自動(dòng)啟動(dòng)功能)。
Web窗體方面,其中包括為ASP.NET路由提供的更加集成化的支持,對(duì)Web標(biāo)準(zhǔn)的增強(qiáng)支持,更新的瀏覽器支持,為數(shù)據(jù)控件增加了一些新功能,以及為視圖狀態(tài)管理增加了一些新的功能。
Web窗體控件方面,提供了一個(gè)新的圖表控件。
MVC框架方面,包括針對(duì)視圖的新的輔助方法,對(duì)分區(qū)的MVC應(yīng)用程序的支持,并提供了異步控制器。
動(dòng)態(tài)數(shù)據(jù)方面,包括針對(duì)現(xiàn)有Web應(yīng)用程序的支持,全對(duì)多對(duì)多關(guān)系和繼承的支持,對(duì)字段模板和屬性的支持,以及增強(qiáng)的數(shù)據(jù)過(guò)濾功能。
在Microsoft AJAX庫(kù)中增加了針對(duì)客戶端中心型Ajax應(yīng)用程序的額外支持。
Visual Web Developer中,包括了改進(jìn)的針對(duì)JScript的智能感知支持,針對(duì)HTML和ASP.NET標(biāo)記的新的自動(dòng)完整代碼片段支持,以及增強(qiáng)的CSS 兼容性支持。
部署方面,為自動(dòng)化的典型的部署任務(wù)增加了新的支持工具。
多目標(biāo)方面,包括針對(duì)無(wú)法在.NET框架的目標(biāo)版本中可用功能的更好的過(guò)濾支持。
有關(guān)這些功能的更詳細(xì)的信息,請(qǐng)參考《ASP.NET 4和Visual Web Developer新特征》。
七、客戶端開(kāi)發(fā)
Windows Presentation Foundation
在.NET框架4中,Windows Presentation Foundation(WPF)在許多方面都發(fā)生了變化并進(jìn)行了改進(jìn),包括控件、圖形和XAML等等。有關(guān)該內(nèi)容的更多的信息,請(qǐng)參考《WPF 4新特征概述》。
八、數(shù)據(jù)
(一)ADO.NET
ADO.NET的實(shí)體框架中提供了新功能,包括持久化透明對(duì)象(Persistence-Ignorant Objects,譯者注:這種對(duì)象具有不必事先在DBMS中建立實(shí)體信息就可以利用實(shí)體框架的DDL生成功能將POCO對(duì)象結(jié)構(gòu)轉(zhuǎn)換成實(shí)體信息結(jié)構(gòu)以存入信息庫(kù)中的能力。),在LINQ查詢功能和自定義對(duì)象層代碼生成等。有關(guān)該內(nèi)容的更多的信息,請(qǐng)參閱《ADO.NET新特征》。
(二) 動(dòng)態(tài)數(shù)據(jù)
對(duì)于ASP.NET 4來(lái)說(shuō),動(dòng)態(tài)數(shù)據(jù)支持得到進(jìn)一步增強(qiáng),從而給你以更強(qiáng)大的功能快速建立數(shù)據(jù)驅(qū)動(dòng)的網(wǎng)站。這包括以下內(nèi)容:
基于在數(shù)據(jù)模型定義的約束的自動(dòng)驗(yàn)證功能。
通過(guò)使用已成為動(dòng)態(tài)數(shù)據(jù)項(xiàng)目的一部分的字段模板,能夠方便地改變?cè)贕ridView和DetailsView控件中針對(duì)相應(yīng)字段生成的標(biāo)記。
有關(guān)該內(nèi)容的更多的信息,請(qǐng)參考《ASP.NET 4和Visual Web Developer新特征》。
九、通信和工作流
Windows通信基礎(chǔ)(WCF)實(shí)現(xiàn)了消息管理方面的增強(qiáng)并提供與 Windows工作流基礎(chǔ)(WF)的無(wú)縫集成。WF提供的改進(jìn)體現(xiàn)在性能、可擴(kuò)展性、工作流建模以及一個(gè)更新的可視化設(shè)計(jì)器等方面。有關(guān)該內(nèi)容的更多的信息,請(qǐng)參考《Windows通信基礎(chǔ)新特征概述》和《Windows工作流基礎(chǔ)新特征概述》。