共用方式為


.NET Framework 4 移轉問題

本文說明 .NET Framework 3.5 版 Service Pack 1 和 .NET Framework 第 4 版之間的移轉問題,包括修正、標準合規性和安全性的變更,以及根據客戶意見反應所做的變更。 這些變更大多不需要在應用程式中進行任何程序設計修改。 如需查看可能需要修改的項目,請參閱表格中建議變更的欄。 值得注意的變更會依區域細分,例如 ASP.NET 和 Windows Presentation Foundation (WPF)。

如需本文中問題的較高層級概觀,請參閱 .NET Framework 4 的移轉指南

如需新功能的相關信息,請參閱 .NET Framework 4 的新功能

ASP.NET 和 Web

命名空間: System.Web、、 System.Web.MobileSystem.Web.SecuritySystem.Web.UI.WebControls

程序集:System.Web (System.Web.dll)

特徵 / 功能 與 3.5 SP1 的差異 建議變更
瀏覽器定義檔案 瀏覽器定義檔案已更新,以包含新的和更新瀏覽器和裝置的相關信息。 已移除 Netscape Navigator 等較舊的瀏覽器和裝置,並新增了較新的瀏覽器和裝置,例如 Google Chrome 和 Apple iPhone。

如果您的應用程式包含繼承自其中一個已移除之瀏覽器定義的自定義瀏覽器定義,您會看到錯誤。

HttpBrowserCapabilities物件(由頁面Request.Browse的 屬性公開)是由瀏覽器定義檔案所驅動。 因此,在 ASP.NET 4 中存取這個物件的 屬性所傳回的資訊可能與舊版 ASP.NET 傳回的資訊不同。
如果您的應用程式依賴舊的瀏覽器定義檔案,您可以從下列資料夾複製它們:

Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\Browsers

將檔案複製到對應的 \CONFIG\Browsers 資料夾,ASP.NET 4。 複製檔案之後,請執行 Aspnet_regbrowsers.exe 命令行工具。 如需詳細資訊,請參閱 https://www.asp.net/mobile 網站。
在混合版本的 ASP.NET 下執行的子應用程式 ASP.NET 4 個設定為舊版 ASP.NET 應用程式子系的應用程式,可能會因為設定或編譯錯誤而無法啟動。 發生的特定錯誤取決於應用程式是在 IIS 6.0 下執行,還是 IIS 7 或 IIS 7.5 下執行。 您可以變更受影響應用程式的組態檔,讓組態系統正確地辨識 ASP.NET 4 應用程式。 如需有關您必須進行的變更的相關信息,請參閱 ASP.NET 網站上《ASP.NET 4 重大變更》文件中的「ASP.NET 4 子應用程式在 ASP.NET 2.0 或 ASP.NET 3.5 應用程式下無法啟動」一節。
ClientID 變更 ASP.NET 4 中的新 clientIDMode 設定可讓您指定 ASP.NET 如何產生 id HTML 元素的屬性。 在舊版的 ASP.NET 中,預設行為相當於 AutoIDclientIDMode設定。 預設設定現在是 Predictable。 如需詳細資訊,請參閱 ASP.NET Web 伺服器控制識別 如果您使用 Visual Studio 從 ASP.NET 2.0 或 ASP.NET 3.5 升級應用程式,此工具會自動將設定新增至 Web.config 檔案,以保留舊版 .NET Framework 的行為。 不過,如果您藉由將 IIS 中的應用程式集區變更為以 .NET Framework 4 為目標來升級應用程式,則 ASP.NET 預設會使用新的模式。 若要停用新的用戶端識別碼模式,請將下列設定新增至 Web.config 檔案:

<pages clientIDMode="AutoID" />
代碼存取安全性 (CAS) ASP.NET ASP.NET 3.5 中新增的 2.0 NET 功能會使用 .NET Framework 1.1 和 .NET Framework 2.0 程式代碼存取安全性 (CAS) 模型。 然而,ASP.NET 4 中的程式碼存取安全性(CAS)已經經過大幅修改。 因此,依賴全域程式集緩存中執行之受信任程序代碼的部分信任 ASP.NET 應用程式可能會因為各種安全性例外狀況而失敗。 依賴大量修改機器 CAS 原則的部分信任應用程式也可能失敗並拋出安全性例外。 您可以使用組態元素中的新 legacyCasModel 屬性 trust,將部分信任的 ASP.NET 4 應用程式還原為 ASP.NET 1.1 和 2.0 的行為,如下列範例所示:

<trust level= "Medium" legacyCasModel="true" />

重要事項:還原至較舊的 CAS 模型可能代表降低的安全性。

如需新 ASP.NET 4 代碼存取安全性模型的詳細資訊,請參閱 ASP.NET 4 應用程式中的程式碼存取安全性
組態檔 .NET Framework 和 ASP.NET 4 的根組態檔(machine.config 檔案和根 Web.config 檔案)已更新為包含應用程式 Web.config 檔案中 ASP.NET 3.5 中大部分的未定案組態資訊。 由於受管理 IIS 7 和 IIS 7.5 組態系統的複雜性,在 ASP.NET 4 和 IIS 7 和 IIS 7.5 下執行 ASP.NET 3.5 應用程式可能會導致 ASP.NET 錯誤或 IIS 錯誤。 使用 Visual Studio 中的項目升級工具,將 ASP.NET 3.5 應用程式升級至 ASP.NET 4。 Visual Studio 2010 會自動修改 ASP.NET 3.5 應用程式的 Web.config 檔案,以包含 ASP.NET 4 的適當設定。

不過,您可以使用 .NET Framework 4 執行 ASP.NET 3.5 應用程式,而不需重新編譯。 在此情況下,您可能必須先手動修改應用程式的 Web.config 檔案,才能在 .NET Framework 4 和 IIS 7 或 IIS 7.5 下執行應用程式。 您必須進行的特定變更取決於您正在使用的軟體組合,包括 Service Pack (SP) 版本。 如需受這項變更影響的可能軟體組合的資訊,以及如何解決特定組合的問題,請參閱 ASP.NET 網站上的文件《ASP.NET 4 重大變更》中「與新 ASP.NET 4 根設定相關的設定錯誤」一節。
控件轉譯 在舊版 ASP.NET 中,某些控件發出標記,您無法停用。 根據預設,此標記類型不會再於 ASP.NET 4 中產生。 轉譯變更會影響下列控件:

Image* 和 ImageButton 控件不再轉譯border="0"屬性。
BaseValidator* 衍生自它的類別和驗證控件預設不會再轉譯紅色文字。
* 控制件 HtmlForm 不會轉譯 name 屬性。
* 控件 Table 不再轉譯 border="0" 屬性。

未針對使用者輸入所設計的控件(例如Label控件)如果其屬性disabled="disabled"設定為Enabled,或者從容器控件繼承此設定,則不再渲染false屬性。
如果您使用 Visual Studio 從 ASP.NET 2.0 或 ASP.NET 3.5 升級應用程式,此工具會自動將設定新增至保留舊版轉譯的 Web.config 檔案。 不過,如果您藉由將 IIS 中的應用程式集區變更為以 .NET Framework 4 為目標來升級應用程式,ASP.NET 預設會使用新的轉譯模式。 若要停用新的轉譯模式,請將下列設定新增至 Web.config 檔案:

<pages controlRenderingCompatibilityVersion="3.5" />
默認檔中的事件處理程式 ASP.NET 4 會將 HTML form 元素的 action 屬性值轉譯為空字串,當對具有對應預設檔的無擴展名 URL 提出要求時。 在舊版的 ASP.NET 中,請求 http://contoso.com 會導致請求 Default.aspx。 在該檔中,開頭 form 標記將會呈現如下例所示:

<form action="Default.aspx" />

在 ASP.NET 4 中,對 http://contoso.com 的要求也會導致對 Default.aspx 的要求,但 ASP.NET 現在會呈現 HTML 開頭 form 標記,如下列範例所示:

<form action="" />

action當 屬性是空字串時,IIS DefaultDocumentModule 物件會建立子要求來Default.aspx。 在大部分情況下,此子要求對應用程式程序代碼而言是透明的,而且Default.aspx頁面會正常執行。 不過,受控程式碼與 IIS 7 或 IIS 7.5 整合模式之間的潛在互動可能會導致受控 .aspx 頁面在子請求期間停止正常運作。 如果發生下列情況,預設.aspx檔的子要求將會導致錯誤或非預期的行為:

* .aspx頁面會傳送至瀏覽器,並將 form 元素的 action 屬性設定為 “ ”
* 表單會回傳至 ASP.NET。
* 受控 HTTP 模組會讀取實體主體的某些部分,例如 Request.FormRequest.Params。 這會導致 POST 請求的實體被讀入受控記憶體。 因此,實體主體不再可供 IIS 7 或 IIS 7.5 整合模式中執行的任何原生程式代碼模組使用。
* IIS DefaultDocumentModule 物件最終會執行,並建立Default.aspx文件的子要求。 不過,由於實體內容已經由一段受控程式碼讀取,因此沒有實體內容可供傳送至子要求。
當 HTTP 管線針對子要求執行時,.aspx 檔案的處理程式會在處理程式執行階段運行。

因為沒有實體主體,因此沒有窗體變數,也沒有檢視狀態。 因此,.aspx頁面處理程序無法獲取資訊來判斷需引發的事件(如果有的話)。 因此,受影響的 .aspx 頁面的回傳事件處理程序都沒有被執行。
如需了解因這項變更可能產生的問題和解決方法,請參閱 ASP.NET 網站上的檔案 ASP.NET 4 重大變更 中的「事件處理程式在 IIS 7 或 IIS 7.5 整合模式中的預設文件中可能不會被引發」。
哈希演算法 ASP.NET 同時使用加密和雜湊演算法來協助保護數據,例如表單驗證 Cookie 和檢視狀態。 根據預設,ASP.NET 4 會使用 HMACSHA256 演算法進行 Cookie 和檢視狀態的哈希作業。 舊版 ASP.NET 使用舊 HMACSHA1 版演算法。 如果您執行混合 ASP.NET 2.0 和 ASP.NET 4 的應用程式,其中窗體驗證 Cookie 等數據必須跨 .NET Framework 版本運作,請在 Web.config 檔案中新增下列設定,將 ASP.NET 4 Web 應用程式設定為使用舊 HMACSHA1 版演演算法:

<machineKey validation="SHA1" />
在 Internet Explorer 中裝載控件 您無法再在 Internet Explorer 中裝載 Windows Forms 控件,因為 Web 上裝載控件有更好的解決方案。 因此,IEHost.dll 和 IEExec.exe 元件已從 .NET Framework 中移除。 您可以使用下列技術在 Web 應用程式中進行自訂控制項開發:

* 您可以建立 Silverlight 應用程式,並將設定為瀏覽器外部執行。 如需詳細資訊,請參閱 瀏覽器外支援
* 您可以建置 XAML 瀏覽器應用程式 (XBAP) 以利用 WPF 功能(需要客戶端電腦上的 .NET Framework)。 如需詳細資訊,請參閱 WPF XAML 瀏覽器應用程式概觀
HtmlEncode 和 UrlEncode 方法 HtmlEncodeUrlEncode 類別的 HttpUtilityHttpServerUtility 方法已更新為將單引號字元(')編碼,如下所示:

* 方法會將 HtmlEncode 單引號的實例編碼為 &#39;
* 方法會將 UrlEncode 單引號的實例編碼為 %27
檢查您的程式代碼中是否有使用 HtmlEncodeUrlEncode 方法的位置,並確定編碼中的變更不會產生會影響您應用程式的變更。
ASP.NET 2.0 應用程式中的 HttpException 錯誤 在 IIS 6 上啟用 ASP.NET 4 之後,ASP.NET IIS 6 上執行的 2.0 應用程式(在 Windows Server 2003 或 Windows Server 2003 R2 中)可能會產生錯誤,例如: System.Web.HttpException: Path '/[yourApplicationRoot]/eurl.axd/[Value]' was not found. 如果不需要 ASP.NET 4 來執行網站,請將網站重新設定為使用 ASP.NET 2.0。

-或-

* 如果需要 ASP.NET 4 才能執行網站,請將任何子 ASP.NET 2.0 虛擬目錄移至對應至 ASP.NET 2.0 的不同網站。

-或-

* 停用無延伸 URL。 如需詳細資訊,請參閱 ASP.NET 網站上 ASP.NET 4 項重大變更 檔中的「ASP.NET 2.0 應用程式可能會產生參考 eurl.axd 的 HttpException 錯誤」。
成員資格類型 ASP.NET 成員資格中使用的某些類型(例如 MembershipProvider)已從 System.Web.dll 移至 System.Web.ApplicationServices.dll 元件。 類型已移動,以解析用戶端中類型與擴充 .NET Framework SKU 之間的架構分層相依性。 已從舊版 ASP.NET 升級的類別庫,且使用已移動的成員資格類型,在 ASP.NET 4 專案中使用時,可能無法編譯。 如果是,請在類別庫專案中新增 System.Web.ApplicationServices.dll的參考。
選單控制變更 Menu 控制變更會導致下列行為:

* 如果 MenuRenderingMode 設定為 List,或 MenuRenderingMode 如果 設定為 DefaultControlRenderingCompatibilityVersion 設定為 4.0 或更新版本,則 PopOutImageUrl 屬性不會有任何作用。
* 如果在StaticPopOutImageUrlDynamicPopOutImageUrl屬性中設定的路徑包含反斜杠(\),則影像不會渲染。 (在舊版的 ASP.NET 中,路徑可能包含反斜杠。
* 不要設定PopOutImageUrl個別選單項目的屬性,而是設定父StaticPopOutImageUrl控制項的DynamicPopOutImageUrlMenu

-或-

MenuRenderingMode設定為 Table,或將 設定MenuRenderingModeDefault ,並將設定ControlRenderingCompatibilityVersion3.5。 這些設定會導致 Menu 控制項使用舊版 ASP.NET 中所使用的 HTML 數據表型配置。
* 如果 或 StaticPopOutImageUrl 屬性中的DynamicPopOutImageUrl路徑包含反斜杠 (\),請取代斜線字元 (/)。
Web.config 檔案中的移動組裝 在舊版 ASP.NET 中,System.Web.Mobile.dll 元件的參考包含在 assembliessystem.web/ 的 compilation 區段的根 Web.config 檔案中。 為了改善效能,已移除這個組件的參考。

注意:System.Web.Mobile.dll 元件和 ASP.NET 行動控制項會包含在 ASP.NET 4 中,但已被取代。
如果您想使用這個組件中的類型,請在一個根 Web.config 檔案或一個應用程式 Web.config 檔案中新增對該組件的參考。
輸出快取 在 ASP.NET 1.0 中,一個錯誤導致指定 Location="ServerAndClient" 作為輸出快取設定的快取頁面在回應中發出 Vary:* HTTP 標頭。 這樣做的效果是告訴客戶端瀏覽器不要在本地快取頁面。 在 ASP.NET 1.1 中, SetOmitVaryStar 已新增 方法,這個方法可以呼叫以隱藏 Vary:* 標頭。 不過,Bug 報告建議開發人員不知道現有的 SetOmitVaryStar 行為。

在 ASP.NET 4 中, Vary:* HTTP 標頭不再從指定下列指示詞的回應發出:

<%@ OutputCache Location="ServerAndClient" %>

因此,不再需要 SetOmitVaryStar 方法來隱藏 Vary:* 標頭。 在為 屬性指定 「ServerAndClient」 Location 的應用程式中,頁面可以在瀏覽器中快取,而不需要呼叫 SetOmitVaryStar
如果應用程式中的頁面必須發出 Vary:*,請呼叫 AppendHeader 方法,如下列範例所示:

System.Web.HttpResponse.AppendHeader("Vary","*");

或者,您可以將輸出快取 Location 屬性的值變更為 “Server”。
頁面剖析 ASP.NET 網頁的頁面剖析器(.aspx檔案)和使用者控件(.ascx 檔案)在 ASP.NET 4 中比舊版 ASP.NET 更嚴格,而且會將標記標示為比舊版更無效。 檢查頁面執行時所產生的錯誤訊息,並修正無效標記所產生的錯誤。
Passport 類型 ASP.NET 2.0 內建的 Passport 支援已經過時,而且由於 Passport 中的變更而不受支援(現在為 Live ID SDK)。 因此,在 System.Web.Security 中與 Passport 相關的類型現在會以 ObsoleteAttribute 屬性標示。 請將命名空間 System.Web.Security 中任何使用 Passport 類型的程式碼更改為使用 Windows Live ID SDK 的程式碼。
FilePath 屬性中的PathInfo資訊 ASP.NET 4 不再在PathInfoFilePathAppRelativeCurrentExecutionFilePath等屬性的傳回值中包含CurrentExecutionFilePath值。 相反地,PathInfo 資訊可以在PathInfo。 例如,假設下列 URL 片段:

/testapp/Action.mvc/SomeAction

在舊版 ASP.NET 中, HttpRequest 屬性具有下列值:

* FilePath: /testapp/Action.mvc/SomeAction
* PathInfo:(空白 )

在 ASP.NET 4 中, HttpRequest 屬性會改為具有下列值:

* FilePath: /testapp/Action.mvc
* PathInfo: SomeAction
檢查您的程式代碼,以瞭解您依賴 類別屬性 HttpRequest 傳回路徑資訊的位置;變更程式代碼以反映傳回路徑資訊方式的變更。
要求驗證 為了改善要求驗證,要求生命週期中會稍早叫用 ASP.NET 要求驗證。 因此,針對非 .aspx 檔案的要求執行要求驗證,例如網頁服務呼叫和自訂處理常式。 當自定義 HTTP 模組在要求處理管線中執行時,要求驗證也會作用中。

由於這項變更,.aspx 檔案以外的資源要求可能會引發驗證要求錯誤。 在要求管線中執行的自定義程式代碼(例如自定義 HTTP 模組)也可能擲回要求驗證錯誤。
如有必要,您可以使用 Web 組態檔中的下列設定,還原成只由 .aspx 頁面觸發要求驗證的舊行為:

<httpRuntime requestValidationMode="2.0" />

警告:如果您還原為舊的行為,請確定現有處理程式、模組和其他自定義程式代碼中的所有程式代碼都會執行檢查可能是 XSS 攻擊媒介的潛在不安全 HTTP 輸入。
路由 如果您在 Visual Studio 2010 中建立文件系統網站,且網站位於資料夾名稱中包含點 (.) 的資料夾,URL 路由將無法可靠地運作。 從某些虛擬路徑傳回 HTTP 404 錯誤。 這是因為 Visual Studio 2010 會使用根虛擬目錄不正確的路徑啟動 Visual Studio 開發伺服器。 * 在檔案網站的 屬性 頁面,將屬性改 Virtual Path 為「/」。

-或-

* 建立 Web 應用程式專案,而不是網站專案。 Web 應用程式項目沒有此問題,即使專案資料夾名稱中有一個點,URL 路由仍可運作。

-或-

* 建立裝載在 IIS 中的 HTTP 型網站。 IIS 裝載的網站,其虛擬路徑和專案檔資料夾中都可以包含點。
SharePoint 網站 如果您嘗試執行部署為 SharePoint 網站子系且包含名為 WSS_Minimal之自定義部分信任層級的 ASP.NET 4 網站,您會看到下列錯誤:

Could not find permission set named 'ASP.Net'.
目前,沒有任何版本的 SharePoint 與 ASP.NET 相容。 因此,您不應該嘗試以 SharePoint 網站的子系身分執行 ASP.NET 4 網站。
XHTML 1.1 標準 若要啟用新網站的 XHTML 1.1 合規性,.NET Framework 4 中的 ASP.NET 控件會產生符合 XHTML 1.1 規範的 HTML。 在 Web.config 檔案中的 <system.Web> 元素內,使用下列選項啟用此轉譯:

<pages controlRenderingCompatibilityVersion="4.0"/>

此選項預設會設定為 4.0。 從 Visual Studio 2008 升級的 Web 專案已啟用 3.5 設定,以保持相容性。
沒有。

核心

一般功能

特徵 / 功能 與 3.5 SP1 的差異 建議變更
CardSpace .NET Framework 不再包含 Windows CardSpace;會個別提供。 Microsoft下載中心下載 Windows CardSpace。
組態檔 已修正 .NET Framework 如何存取應用程式組態檔。 如果您的應用程式群組態檔名為 application-name.config,請將它重新命名為 application-name.exe.config。例如,將 MyApp.config 重新命名為 MyApp.exe.config
C# 程式代碼編譯程式 Compiler命名空間中的 CompilerErrorErrorLevelMicrosoft.CSharp 類別已不再可供使用,且其元件 (cscompmgd.dll) 已不再包含在 .NET Framework 中。 使用 CodeDomProvider 命名空間中的 System.CodeDom.Compiler 類別和其他類別。 如需詳細資訊,請參閱 使用 CodeDOM
主機代管 (非管理的 API) 為了改善裝載功能,某些裝載啟用 API 已被取代。 同進程並行執行功能可讓應用程式在同一個進程中載入和啟動多個 .NET Framework 版本。 例如,您可以在相同進程中執行應用程式,這些應用程式載入以 .NET Framework 2.0 SP1 為基礎的增益集(或元件)以及以 .NET Framework 4 為基礎的增益集。 較舊的元件會繼續使用較舊的 .NET Framework 版本,而新的元件則使用新的 .NET Framework 版本。 使用 In-Process 並存執行中所述的組態。
新的安全性模型 程式代碼存取安全性 (CAS) 原則已關閉並取代為簡化的模型,如 .NET Framework 4 中的安全性變更中所述。 如果您依賴應用程式中的 CAS,可能需要做出修改。 如需詳細資訊,請參閱 程式代碼存取安全策略相容性和移轉

日期和時間

Namespace: System

元件:mscorlib (mscorlib.dll)

特徵 / 功能 與 3.5 SP1 的差異 建議變更
日光節約 為了與系統時鐘一致,時間屬性(例如 LocalNow)現在會使用作系統規則,而不是用於日光節約時間作業的其他 .NET Framework 數據。 沒有。
格式化字串 為了支援區分文化的格式,TimeSpan 結構不僅引入了 ToStringParseTryParse 方法的新多載,還新增了 ParseExactTryParseExact 方法。 沒有。

全球化

如需新中性文化和特定文化的清單,請參閱 全球化和當地語系化的新功能

Namespace: System.Globalization

元件:mscorlib (mscorlib.dll)

特徵 / 功能 與 3.5 SP1 的差異 建議變更
文化名稱 下列名稱變更會影響德文、迪維希和非洲文化特性:

* CurrencyEnglishName:德國(瑞士)(de-CH)文化的貨幣名稱已從“sFr”改為“Fr.”。
* LongDatePattern:迪維希(瑪律代夫)(dv-MV)文化的長日期模式已從“dd/MMMM/y”改為“dd/MM/yyyy”。
* PMDesignator:非洲非洲人(南非)(af-ZA)文化的P.M.指示者已從“nm”改為“PM”。
請注意文化名稱變更。
LCID 參數 為了與自動化伺服器設定中預期的行為一致,CLR 不再針對 LCID 參數傳遞目前的文化設定至非受控 COM 型應用程式。 而是以1033(en-us)代表該文化。 除了需要指定文化特性的原生應用程式以外,不需要任何修改。
過時的文化特性類型 CultureTypesCultureTypes 文化特性類型現在已過時。

為了確保回溯相容性,CultureTypes 現在會傳回先前 .NET Framework 所包含的中性與特定文化特性,而 CultureTypes 則會傳回一個空的清單。
使用CultureTypes列舉的其他值。
取得文化 從 Windows 7 開始,.NET Framework 4 會從作系統擷取文化特性資訊,而不是儲存數據本身。 此外,.NET Framework 與 Windows 進行同步,以便進行排序和大小寫處理。 沒有。
Unicode 5.1 標準 .NET Framework 現在支援所有 Unicode 5.1 個字元 -- 新增大約 1400 個字元。 其他字元包括新的符號、箭號、變音符號、標點符號、數學符號、CJK 筆劃和表意、其他馬來亞拉姆和泰魯古數位字元,以及各種緬甸、拉丁、阿拉伯文、希臘文、蒙古文和斯拉夫字元。 Unicode 5.1 支援下列新腳本:Sundanese、Lepcha、Ol Chiki、Vai、Saurashtra、Kayah Li、Rejang、Gurmukhi、Odia、Tamil、Telugu 和 Malayalam 字元和 Cham。 沒有。

例外狀況

命名空間: SystemSystem.Runtime.ExceptionServices

元件:mscorlib (mscorlib.dll)

特徵 / 功能 與 3.5 SP1 的差異 建議變更
損毀進程狀態的例外狀況 CLR 不再將損毀進程狀態的例外狀況傳遞給 Managed 程式代碼中的例外狀況處理程式。 這些例外狀況表示進程的狀態已損毀。 我們不建議您以這個狀態執行您的應用程式。

如需詳細資訊,請參閱 HandleProcessCorruptedStateExceptionsAttribute 和 MSDN 雜誌中的《處理損毀狀態例外狀況》項目。
執行引擎例外狀況 ExecutionEngineException 現在已過時,因為可攔截的例外狀況會允許不穩定的進程繼續執行。 這項變更可改善運行時間的可預測性和可靠性。 使用InvalidOperationException來發出條件的訊號。

反射

Namespace: System.Reflection

元件:mscorlib (mscorlib.dll)

特徵 / 功能 與 3.5 SP1 的差異 建議變更
程序集哈希演算法 属性 HashAlgorithm 現在會傳回 AssemblyHashAlgorithm,因為在未載入組件時,運行時無法得知參考組件的雜湊演算法。 這是指在參考的元件上使用屬性,例如 GetReferencedAssemblies 方法所傳回的屬性。 沒有。
元件載入 為了防止重複載入元件並節省虛擬位址空間,CLR 現在僅使用 Win32 MapViewOfFile 函式載入元件。 它不再呼叫 函式 LoadLibrary

這項變更會以下列方式影響診斷應用程式:

* ProcessModuleCollection 將不再包含任何來自類別庫(.dll 檔案)的模組,這些模組過去是透過呼叫 Process.GetCurrentProcess().Modules 取得的。
* 使用 函式的 EnumProcessModules Win32 應用程式不會看到所有列出的受控模組。
沒有。
宣告類型 當類型沒有宣告類型時,屬性 DeclaringType 現在會正確傳回 Null。 沒有。
代表 當 null 值傳遞給委派的建構函式時,委派現在會擲回 ArgumentNullException ,而不是 NullReferenceException 確保任何例外狀況的處理都會攔截ArgumentNullException
全域程式集緩存位置變更 針對 .NET Framework 4 元件,全域程式集緩存已從 Windows 目錄 (%WINDIR%) 移至 Microsoft.Net 子目錄 (%WINDIR%\Microsoft.Net)。 舊版本的組件會保留在舊的目錄中。

未管理的 ASM_CACHE_FLAGS 列舉包含新的ASM_CACHE_ROOT_EX旗標。 此旗標會取得 .NET Framework 4 元件的快取位置,此元件可由 GetCachePath 函式取得。
無,假設應用程式不會使用元件的明確路徑,這不是建議的做法。
全域程式集緩存工具 Gacutil.exe (全域組件快取工具) 不再支援 Shell 外掛程式檢視器。 沒有。

互操作性

Namespace: System.Runtime.InteropServices

元件:mscorlib (mscorlib.dll)

特徵 / 功能 與 3.5 SP1 的差異 建議變更
緩衝區長度 (非受控 API) 為了節省記憶體,pBufferLengthOffset 方法的參數功能已變更為符合 pStringLengthOffset 參數。 這兩個參數現在都指向字串長度的位移位置。 已從字串類別的表示中移除緩衝區長度。 移除任何對緩衝區長度的相依性。
JIT 偵錯 為了簡化 Just-In-Time (JIT) 偵錯的註冊,.NET Framework 調試程式現在只會使用 AeDebug 登錄機碼,以控制原生程式代碼的 JIT 偵錯行為。 這項變更會產生下列結果:

* 您無法再為受控代碼和原生代碼註冊兩個不同的除錯程式。
* 您無法再針對非互動式行程自動啟動除錯程式,但您可以提示使用者進行互動式進程。
* 當調試程式無法啟動,或沒有應該啟動的已註冊調試程式時,您就不會再收到通知。
* 不再支援相依於應用程式互動性的自動啟動原則。
視需要調整偵錯作業。
平台調用 若要改善與 Unmanaged 程式代碼互作性的效能,在平台調用中使用不正確的呼叫慣例現在會導致應用程式無法運行。 在舊版中,封送處理層會由下而上地解決這些錯誤。 在 Microsoft Visual Studio 中對您的應用程式進行偵錯,會提醒您這些錯誤,以便修正這些錯誤。

如果您有無法更新的二進位檔,您可以在應用程式的組態檔中加入 <NetFx40_PInvokeStackResilience> 元素,以便讓呼叫錯誤能夠如舊版一樣通過堆疊解決。 不過,這可能會影響應用程式的效能。
已移除介面(非管理 API) 為避免開發者混淆,以下介面被移除,因為它們未提供任何有用的執行時情境,且 CLR 未提供或接受任何實作:

* INativeImageINativeImageDependency
* INativeImageInstallInfo
* INativeImageEvaluate
* INativeImageConverter
* ICor模組
* IMetaDataConverter
沒有。

資料

本節說明使用數據集和 SQL 用戶端、Entity Framework、LINQ to SQL 和 WCF 數據伺服器的移轉問題(先前稱為 ADO.NET Data Services)。

DataSet 和 SQL Client

下表描述先前有限制或其他問題的功能改善。

命名空間:System.DataSystem.Data.Objects.DataClassesSystem.Data.SqlClient

元件:System.Data(System.Data.dll),System.Data.Entity(System.Data.Entity.dll)

特徵 / 功能 與 3.5 SP1 的差異
POCO 案例 IRelatedEnd 介面有了新的方法,以改善在簡單舊式 CLR 物件(POCO)情境中的可用性。 這些新方法會採用 Object 而非 IEntityWithRelationships 實體作為參數。
編輯數據列 方法 IndexOf,如由 DataView 類別實作,現在會正確傳回正在編輯資料行的值,而不是傳回 -1。
活動 現在,當數據列處於已修改狀態並且呼叫PropertyChanged方法時,會引發RejectChanges事件。 這項變更可讓您更輕鬆地建立UI控制項來公開物件的內容 DataSet
例外狀況 現在,如果連線未設定或開啟,方法Prepare會擲回InvalidOperationException,而不是NullReferenceException
映射視圖 查詢視圖映射錯誤現在會在設計時被發現,而不是在執行時丟出 a NullReferenceException

對應驗證現在會偵測概念架構(CSDL)中兩個關聯集群對應到相同欄位的錯誤。
交易 如果應用程式在交易完成之後嘗試在連接上執行語句(包括中止或回復), InvalidOperationException 現在會擲回 。 先前版本不會拋出例外,允許您繼續執行其他命令,即便交易已中止。

Entity Framework

下表描述先前有限制或其他問題的功能改善。

命名空間:System.DataSystem.Data.ObjectsSystem.Data.Objects.DataClasses

元件:System.Data.Entity (System.Data.Entity.dll中)

特徵 / 功能 與 3.5 SP1 的差異
實體物件 呼叫 方法時Detach,方法與實體物件的狀態之間現在有同位SaveChanges。 改善的一致性性質可避免發生非預期的例外。
實體 SQL 實體 SQL 中的識別碼解析規則已改善。

Entity SQL 剖析器已改善解析多部分標識碼的邏輯。
結構注釋 Entity Framework 現在可辨識結構批注。
查詢 查詢中已進行下列改善:

GroupBy* 在空集合上使用 Null 索引鍵的查詢將不會傳回任何數據列,不論查詢中是否有任何額外的選取。
* LINQ 和 Entity-SQL 查詢中產生的 SQL 現在預設會將字串參數視為非 Unicode 值。

LINQ to SQL

下表描述先前有限制或其他問題的功能改善。

Namespace: System.Data.Linq

組件:System.Data.Linq (System.Data.Linq.dll)

特徵 / 功能 與 3.5 SP1 的差異
活動 除了在集合載入時引發事件之外,如果集合 EntitySet<TEntity> 是未載入狀態,集合 ListChanged 現在在加入和移除操作時也會引發 EntitySet<TEntity> 事件。
查詢 Skip(0) 在 LINQ to SQL 查詢中不再被忽略。 因此,具有此方法的查詢可能會有不同的行為。 例如,在某些情況下,需要包含OrderBy子句以搭配Skip(0),如果查詢中未包含NotSupportedException子句,則會拋出OrderBy例外狀況。

WCF Data Services

下表描述先前有限制或其他問題的功能改善。

命名空間: System.Data.Services、、 System.Data.Services.ClientSystem.Data.Services.CommonSystem.Data.Services.Providers

程序集:System.Data.Services(在 System.Data.Services.dll),System.Data.Services.Client(在 System.Data.Services.Client.dll)

特徵 / 功能 與 3.5 SP1 的差異
批量二進位内容 WCF Data Services 現在支援要求和回應中的批次二進位內容。
變更攔截器 變更攔截器現在會針對刪除要求執行。

變更攔截器是每次伺服器收到要求以修改實體集內實體時執行的方法。 它會在執行傳入要求之前執行。 變更攔截器可讓您存取正在變更的實體,以及針對實體執行的作業。
例外狀況 下列條件現在會擲回更有用的例外狀況,而不是擲回 NullReferenceException

當呼叫資料服務逾時時,會出現TimeoutException
* 當對 DataServiceRequestException 數據服務發出錯誤的請求時。

在您的應用程式中,您應該變更例外狀況處理以攔截新的例外狀況。
標題 標題已進行以下改進:

* WCF Data Services 現在能夠正確拒絕具有未指定值的eTag標頭。
WCF Data Services 現在在請求中包含 if-* 標頭時會傳回錯誤,並且不會執行對鏈接的刪除請求。
* WCF Data Services 現在會以 Accept 標頭中指定的用戶端格式將錯誤傳回給用戶端(Atom,JSON)。
JSON 讀取器 JavaScript 物件表示法 (JSON) 讀取器現在會在讀取單一反斜杠 (“\”) 逸出字元時正確傳回錯誤,當它處理傳送至 WCF 數據服務的 JSON 承載時。
合併 MergeOption 列舉進行了以下改善:

* 合併選項不再因為來自數據服務的任何後續回應而修改用戶端上的實體。
* 選項 MergeOption 現在在動態 SQL 與預存程式型更新之間保持一致。
要求 現在會在處理數據服務要求之前呼叫OnStartProcessingRequest方法。 這可讓要求對 ServiceOperation 服務正常運作。
數據流 WCF Data Services 不再關閉基礎數據流以進行讀取和寫入作業。
URI 已更正 WCF Data Services 用戶端的 URI 逸出。

Windows Communication Foundation (WCF)

下表描述先前有限制或其他問題的功能改善。

特徵 / 功能 與 3.5 SP1 的差異
組態檔 若要透過組態檔階層啟用行為繼承,WCF 現在支援跨組態檔合併。

設定繼承模型現在已展開,讓使用者定義將套用至計算機上執行的所有服務的行為。

若在階層不同層級中出現相同名稱的行為,您可能會發現行為上的變化。
服務託管 您無法再藉由將屬性<serviceHostingEnvironment>新增到元素定義中,在服務層級指定allowDefinition="MachineToApplication"組態元素。

在服務層級指定 <serviceHostingEnvironment> 元素在技術上是不正確的,並會導致行為不一致。

Windows Presentation Foundation (WPF)

應用程式

命名空間: System.WindowsSystem.Windows.Controls

元件:PresentationFramework (PresentationFramework.dll)

特徵 / 功能 與 3.5 SP1 的差異 建議變更
例外狀況處理 為了讓錯誤能夠更早被偵測到,WPF 丟擲TargetInvocationException並將屬性InnerException設定為重大例外狀況,例如NullReferenceExceptionOutOfMemoryExceptionStackOverflowExceptionSecurityException,而不是攔截原始例外狀況。 沒有。
鏈接的資源 為了讓連結更容易,位於專案資料夾結構以外的位置的資源檔(例如影像)會使用資源檔的完整路徑,而不只是在建置應用程式時作為資源標識符的檔名。 應用程式能在執行時定位這些檔案。 沒有。
部分信任應用程式 基於安全性考慮,在部分信任環境中執行的 Windows 應用程式,以及包含 WebBrowser 控制項或 Frame 控制項(包含 HTML),會在建立控制項時擲回 SecurityException

如果符合下列所有條件,瀏覽器應用程式將會擲回例外狀況並顯示訊息:

* 應用程式正在 Firefox 中執行。
* 應用程式正在以部分信任的方式在網際網路區域執行,來自不受信任的網站。
* 應用程式包含控制項 WebBrowserFrame 包含 HTML 的控制項。

從信任網站或從內部網路區域執行的應用程式將不會受到影響。
在瀏覽器應用程式中,您可以執行下列其中一項來簡化這項變更:

* 在完全信任的設定下執行瀏覽器應用程式。
* 讓客戶將應用程式的網站新增至信任的網站區域。
資源字典 為了改善主題層級資源字典並防止它們變更,在資源字典中定義的可凍結資源,並合併到主題層級字典中,現在一律會標示為凍結且不可變。 這是可凍結資源的預期行為。 修改主題層級合併字典中定義之資源的應用程式應該複製資源,並修改複製的複本。 或者可以將資源標示為 x:Shared="false" ,以便每次查詢資源時由 ResourceDictionary 創建新的複本。
Windows 7 若要讓 WPF 應用程式在 Windows 7 上運作得更好,已進行下列改善,以更正窗口的行為:

* 停駐和手勢狀態現在會根據用戶互動如預期般運作。
* 工作列命令 串聯視窗、顯示視窗堆疊並排顯示視窗 現在運作正常,並更新適當的屬性。
最大化或最小化視窗的 TopLeftWidthHeight 屬性現在包含視窗的正確還原位置,而不是其他值,這取決於監視器。
沒有。
Windows 樣式和透明度 如果您嘗試將InvalidOperationException設為除WindowStyle以外的值,當WindowStyleAllowsTransparencytrueWindowState時,則會擲回WindowState 如果當 WindowStyleAllowsTransparency 時您必須變更 true,您可以呼叫 Win32 SetWindowLongPtr 函式。
XPS 檢視器 WPF 不包含MICROSOFT XML 紙張規格基本套件 (XPSEP)。 XPSEP 隨附於 Windows 7 和 Windows Vista。

在執行 Windows XP 且未安裝 .NET Framework 3.5 SP1 的電腦上,使用 PrintDialog 以外的 WPF API 進行列印將會依賴 WINSPOOL。 不會報告某些印表機功能,而且列印期間不會套用某些印表機設定。
如有需要,請安裝 Microsoft XML 紙張規格 Essentials 套件。

控制項

命名空間: System.Windows、、 System.Windows.ControlsSystem.Windows.DataSystem.Windows.Input

元件:PresentationFramework(在 PresentationFramework.dll中)、PresentationCore(在 PresentationCore.dll中)、WindowsBase(在 WindowsBase.dll中)

特徵 / 功能 與 3.5 SP1 的差異 建議變更
對話框 為了改善可靠性,方法 ShowDialog 會在建立 FileDialog 控件的相同線程上呼叫。 請務必在相同的線程上建立 FileDialog 控件並呼叫 ShowDialog 方法。
浮動視窗 若要修正不正確地不斷激活浮動視窗的焦點還原邏輯(使其顯示為模態對話框),如果候選目標不是視窗的子系,則現在會防止焦點還原。 沒有。
集合中的專案 當項目移動或新增至基礎集合時,如果 CollectionView 沒有排序,則會在 CollectionView 中以相同的相對位置出現。 這可在集合中專案的位置與相關聯的 CollectionView之間提供一致性。 ContainerFromItemIndexOf方法來尋找CollectionView中專案的位置,而不要依賴專案的固定位置。
版面配置 若要消除不必要的重新配置,變更 ShowsNavigationUI 不再使版面配置失效,或造成另一個版面配置通過。 如果您預期變更 ShowsNavigationUI 會導致另一個版面配置過程,請在設定屬性之後呼叫 InvalidateVisual
功能表 若要在功能表彈出視窗中啟用 ClearType 文字,已對ControlTemplate類別和MenuItem控件及其他控件進行修改。 應用程式不應依賴控件範本的視覺結構。 只有具名的 ControlTemplate 部分是公用合約的一部分。 如果應用程式必須在 中 ControlTemplate尋找特定物件,請搜尋特定類型的可視化樹狀結構,而不是依賴樹狀結構中物件的固定位置。
導航 如果Frame直接巡覽至一個位置,則在初次導覽之後,IsNavigationInitiator屬性會成為true。 這項變更可防止在啟動案例期間引發其他事件。 沒有。
快顯 CustomPopupPlacementCallback 委派現在在版面配置過程中可以被多次呼叫,而不再僅限於呼叫一次。 如果您的CustomPopupPlacementCallback委派是根據Popup的先前位置計算其位置,則僅當popupSizetargetSizeoffset參數的值發生變更時,才重新計算位置。
屬性值 方法 SetCurrentValue 現在可讓您將屬性設定為有效值,不過它會繼續遵守任何會影響屬性的系結、樣式或觸發程式。 每當屬性值因其他操作引起的副作用而變更時,控件作者應使用 SetCurrentValue ,包括用戶操控。
文字框 基於安全性考慮,CopyCut 方法在部分信任情況下呼叫時會無聲失敗。

此外,以程式化方式執行繼承自 CopyCutTextBoxBase 屬性控制項,將在部分信任環境中遭到封鎖。 不過,使用者起始的複製和剪下命令,例如按下屬性系結至下列其中一個命令的按鈕 Command 即可運作。 標準複製和剪下的鍵盤快捷鍵和快速功能表,在部分信任狀態下仍會如常運作。
CopyCut 命令系結至使用者起始的動作,例如按鍵。

圖形

命名空間:System.Windows、、System.Windows.ControlsSystem.Windows.Data、、 System.Windows.InputSystem.Windows.Media.Effects

元件:PresentationFramework(在 PresentationFramework.dll中)、PresentationCore(在 PresentationCore.dll中)、WindowsBase(在 WindowsBase.dll中)

特徵 / 功能 與 3.5 SP1 的差異 建議變更
點陣圖效果 為了改善效能,繼承自 BitmapEffect 類別的 BitmapEffect 類別以及其他相關類別雖然仍然存在,但已被停用。 如果下列條件成立,效果將會使用硬體加速轉譯管線來轉譯:

* 應用程式會使用 DropShadowBitmapEffectBlurBitmapEffect ,其半徑屬性設定小於 100 DIU。
* 執行應用程式之電腦上的視訊卡支援圖元著色器 2.0。

如果不符合這些條件, BitmapEffect 物件將不會有任何作用。

此外,當 Visual Studio 遇到 BitmapEffect 物件或子類別時,會產生編譯程式警告。

方法 PushEffect 標示為過時。
停止使用舊版 BitmapEffect 和衍生類別,而改用衍生自 Effect的新類別: BlurEffectDropShadowEffectShaderEffect

您也可以從 ShaderEffect 類別繼承,創造您自己的效果。
點陣圖框架 複製 BitmapFrame 的物件現在會收到 DownloadProgressDownloadCompletedDownloadFailed 事件。 這可讓從 Web 下載的影像透過 Image 將其套用至 Style 控制元件後正常運作。

只有在下列所有語句都成立時,才會看到行為變更:

* 您訂閱 DownloadProgressDownloadCompletedDownloadFailed 事件。
* 的來源 BitmapFrame 來自 Web。
當下載仍在進行時,BitmapFrame 被克隆。
檢查事件處理程式中的寄件者,並且只有在寄件者是原始 BitmapFrame時才會採取動作。
譯碼影像 為了防止在影像可能無法譯碼時未被處理,IOException類別會在無法譯碼影像時觸發BitmapSource事件。 移除所有例外處理 IOException,並使用 DecodeFailed 事件來檢查解碼失敗。

輸入

命名空間: System.Windows、、 System.Windows.ControlsSystem.Windows.DataSystem.Windows.Input

元件:PresentationFramework(在 PresentationFramework.dll中)、PresentationCore(在 PresentationCore.dll中)、WindowsBase(在 WindowsBase.dll中)

特徵 / 功能 與 3.5 SP1 的差異 建議變更
綁定命令實例 若要提供將 View-Model 型命令實例系結至以檢視為基礎的輸入手勢的機制,類別 InputBinding 現在會繼承自 Freezable 而非 DependencyObject。 下列屬性現在是相依性屬性:

* Command
* CommandParameter
* CommandTarget

這項變更會產生下列結果:

* 註冊 InputBinding 物件時,對象現在會凍結,而不是保持可變動。
* 由於 類別的限制InputBinding,您無法從多個線程存取實例層級DependencyObject物件。
* 由於 類別的限制 Freezable ,您無法在類別註冊之後變更類別層級輸入系結。
* 您無法在檢視模型中建立的命令實例上指定輸入系結。
如果系結是可變動的,請在個別線程上建立類別的 InputBinding 個別實例,否則請凍結它們。 在註冊類別層級靜態 InputBinding 之後,請勿變更它。
瀏覽器應用程式 WPF 瀏覽器應用程式 (.XBAP) 現在會像獨立 WPF 應用程式一樣處理重要事件,讓物件以正確的順序接收路由索引鍵事件。 沒有。
死鍵組合 WPF 模糊化無效索引鍵,其不會產生可見字元,但改為表示索引鍵要與下一個字母索引鍵結合,以產生一個字元。 索引鍵輸入事件,例如 KeyDownEvent 事件,會藉由將 屬性設定 Key 為 值,回報索引鍵是無效索引 Key 鍵。 通常這是預期的行為,因為應用程式通常不打算回應建立合併字元的鍵盤輸入。 預期讀取屬於合併字元一部分之鍵的應用程式可以使用 DeadCharProcessedKey 屬性來取得現在已模糊化的鍵。
焦點管理員 當傳遞至FocusManager.GetFocusedElement(DependencyObject)方法的元素具有IsFocusScope附加屬性設為true時,若且唯若傳回的元素屬於與傳遞至方法的元素相同的PresentationSource物件,則方法會傳回在該焦點範圍中最後一個取得鍵盤焦點的元素。 沒有。

UI 自動化

命名空間:System.WindowsSystem.Windows.Automation.PeersSystem.Windows.Automation.ProviderSystem.Windows.ControlsSystem.Windows.DataSystem.Windows.Input

元件:PresentationFramework(PresentationFramework.dll)、PresentationCore(PresentationCore.dll)、UIAutomationProvider(UIAutomationProvider.dll)、WindowsBase(WindowsBase.dll)

特徵 / 功能 與 3.5 SP1 的差異 建議變更
檢視的類別階層 TreeViewAutomationPeerTreeViewItemAutomationPeer 類別繼承自 ItemsControlAutomationPeer,而不是 FrameworkElementAutomationPeer 如果您繼承自 TreeViewItemAutomationPeer 類別並重寫 GetChildrenCore 方法,請考慮返回繼承自新 TreeViewDataItemAutomationPeer 類別的物件。
位於螢幕外的容器 若要修正不正確的傳回值,IsOffscreenCore 方法現在會針對滾動至視圖之外的項目容器正確傳回 false 。 此外,方法的值不會受到其他視窗的遮蔽影響,也不會因為元素在特定監視器上是否可見而受到影響。 沒有。
選單和子物件 若要啟用包含除 MenuItem 物件以外的子項目的功能表的 UI 自動化,GetChildrenCore 方法現在會傳回子 AutomationPeer 物件的 UIElement 物件,而不是 MenuItemAutomationPeer 物件。 沒有。
新的介面和組裝 若要啟用UI自動化的新功能,已新增下列介面:

* IItemContainerProvider
* ISynchronizedInputProvider
* IVirtualizedItemProvider
任何建置 WPF 自動化同儕的專案都必須新增對 UIAutomationProvider.dll的明確引用。
拇指 此方法的 GetClassNameCore 會傳回一個值,而不是 null。 因此,繼承自 GridSplitter 類別的Thumb控件會將名稱回報給UI自動化。 沒有。
虛擬化元素 為了改善效能, GetChildrenCore 方法只會傳回實際位於可視化樹狀結構中的子物件,而不傳回所有子物件,而不論它們是否虛擬化。 使用 ItemContainerPattern 來遍歷 ItemsControlAutomationPeer 的所有項目。

XAML

命名空間:System.Windows、、System.Windows.ControlsSystem.Windows.Data、、 System.Windows.InputSystem.Windows.Markup

元件:PresentationFramework(在 PresentationFramework.dll中)、PresentationCore(在 PresentationCore.dll中)、WindowsBase(在 WindowsBase.dll中)

特徵 / 功能 與 3.5 SP1 的差異 建議變更
標記擴展 WPF 現在在使用標記延伸來設定屬性或在集合中建立專案的某些情況下,會正確地一律使用來自 ProvideValue 方法中的值,而不是傳回 MarkupExtension 物件。 在某些情況下,標記延伸可能會傳回本身。 如果您的應用程式存取在舊版中傳回 MarkupExtension 對象的資源,請參考從 ProvideValue傳回的物件,而不是 MarkupExtension 物件。
解析屬性 XAML 中的屬性現在只能有一個句點。 例如,下列是有效的:

<Button Background="Red"/> (無句號)

<Button Button.Background = "Red"/> (一段時間)

下列內容已不再有效:

<Button Control.Button.Background = "Red"/> (多個句號)
更正具有一個以上的句點的 XAML 屬性。

XML

下表中的數據列描述先前有限制或其他問題的功能改善。

架構和轉換

命名空間:System.Xml.Linq; 、 System.Xml.SchemaSystem.Xml.XPath

元件:System.Xml(System.Xml.dll),System.Xml.Linq(System.Xml.Linq.dll)

特徵 / 功能 與 3.5 SP1 的差異
Chameleon 架構 為了防止數據損毀,現在在包含多個架構時,變色龍架構會正確複製。

Chameleon 架構是沒有目標命名空間的架構,而且當它們包含在另一個 XSD 中時,它們會採用匯入架構的目標命名空間。 它們通常用來將一般類型包含在架構中。
標識元函式 當對象傳遞至 XLST 時,XSLT XmlReader現在會傳回正確的值,而不是 Null。

如果使用者使用 XmlReader 方法從 LINQ to XML 類別建立CreateReader物件,而且此XmlReader物件已傳遞至 XSLT,則 XSLT 中任何函式的實例id先前都傳回 Null。 這不是允許的 id 函式的傳回值。
命名空間屬性 為了防止資料損毀,XPathNavigator 物件現在會正確返回x:xmlns屬性的本機名稱。
命名空間宣告 XmlReader子樹上的物件不再在一個 XML 元素內建立重複的命名空間宣告。
架構驗證 為了避免錯誤架構驗證,類別 XmlSchemaSet 允許正確且一致地編譯 XSD 架構。 這些架構可以包含其他架構;例如, A.xsd 可以包含 B.xsd,其中包含 C.xsd。 編譯這些任一會使得相依性圖表被遍歷。
腳本函式 當函式實際可用時,function-available 函式 不再錯誤地傳回 false
URI 方法 Load 現在會在LINQ查詢中傳回正確的BaseURI。

驗證

命名空間:System.Xml.Linq; 、 System.Xml.SchemaSystem.Xml.XPath

元件:System.Xml(System.Xml.dll),System.Xml.Linq(System.Xml.Linq.dll)

特徵 / 功能 與 3.5 SP1 的差異
命名空間解析程式 方法 ReadContentAs 不再忽略 IXmlNamespaceResolver 傳遞給它的解析程式。

在舊版中,會忽略指定的命名空間解析程式,改用 XmlReader
空格符 為了避免在建立讀取器時遺失數據, Create 方法不再捨棄顯著的空格符。

XML 驗證可辨識混合內容模式,其中文字可以與 XML 標記混合。 在混合模式中,所有空格符都很重要,而且應該回報。

寫入中

命名空間:System.Xml.Linq; 、 System.Xml.SchemaSystem.Xml.XPath

元件:System.Xml(System.Xml.dll),System.Xml.Linq(System.Xml.Linq.dll)

特徵 / 功能 與 3.5 SP1 的差異
實體參考 為了防止數據損毀,在 XML 屬性中,實體參考不再被重複轉換。

如果用戶嘗試使用xmlns方法將實體寫入xml:lang屬性或xml:space屬性或WriteEntityRef屬性中,該實體會在輸出中被轉換為實體兩次,從而損壞資料。
新行處理 為了防止數據損毀, XmlWriter 物件會遵守 NewLineHandling 選項。

另請參閱