本頁內容
簡介
Microsoft .NET Framework 2.0 是在 Microsoft .NET Framework 1.0 和 1.1 成功的基礎上構建的,用于為 Web 和 Microsoft Windows 客戶端應用程序提供最佳的運行庫環境。對于 .NET Framework 1.1 應用程序,Microsoft 的兼容性目標是:這些應用程序能夠在 .NET Framework 2.0 上順利運行。在 Beta 2 發布期間,我們還沒有達到這個目標,并且正在尋找有關這些應用程序問題的反饋,以便在 .NET Framework 2.0 發布之前解決這些問題。本文將探討應用程序的兼容性方案,并為各個階段提供最佳做法建議。
執行摘要
• |
這里提供已知破壞性更改的完整列表。該列表適用于 Beta 2,并將進一步更新以用于 RTM。如果您遇到該列表以外的更改,請發送郵件至 netfxcmp@microsoft.com。 |
• |
Microsoft 建議您在 Beta 2 期間針對 .NET Framework 2.0 測試您的 .NET Framework 1.1 應用程序。兼容性測試方案提供該操作的指導。 |
• |
即使在計算機上安裝了 .NET Framework 2.0,使用 .NET Framework 1.1 構建的單機版 Microsoft Windows 客戶端或 Web 應用程序也將自動在 1.1 框架上運行。 |
• |
本機應用程序的托管外接程序(例如,Microsoft Office 或 Internet Explorer)將自動在計算機安裝的最新版本的 .NET Framework 上運行。在部署該版本的 Framework 之前,開發人員和 IT 經理應該針對 .NET Framework 2.0 測試這些外接程序。 |
• |
現在,我們仍然在尋找更多的應用程序來進行測試。如果您有興趣提供您的 .NET Framework 1.1 應用程序,請發送郵件至 netfxcmp@microsoft.com。 |
破壞性更改的定義
破壞性更改是那些在 .NET Framework(運行庫破壞性更改)或 Visual Studio(design/compile/project 升級)中使某些應用程序或開發方案行為異常的更改。這些更改不一定是那些我們已發現的破壞應用程序的更改;更準確地說,這些更改是在設計檢查和測試過程中發現的行為更改,它們有可能影響應用程序。實際上,在我們所有的應用程序兼容性測試中,發現的影響應用程序的更改不到十個。
運行庫更改可以分為兩類:第一類(也是最少見的)是 API 破壞性更改,包括更改函數簽名或刪除函數。幾乎在所有情況下,這些更改都是出于安全考慮。在整個 .NET Framework 2.0 中,此類更改不到 5 個。
第二類(較常見的破壞性更改類型)是行為破壞性更改,包括更改方法的行為。此類更改的示例包括:更改由于特定錯誤而引發的異常,以及更改浮點操作的精度。
.NET Framework 2.0 中所有已知的破壞性更改都經過了仔細檢查,并且記錄在此處以用于 Beta 2。進行破壞性更改的原因有許多,包括符合標準、客戶反饋以及正確性問題。我們已經盡量詳細地記錄這些更改,但我們相信其中的很多更改仍會影響到少量用戶。每種類型的運行庫更改的示例都遵循以下原則:
• |
符合標準:Kyrgyzstan 的 System.Globalization 中的 ISO 標記從 KZ 更新為 KY。 |
• |
符合標準:ASP.NET 中呈現的 HTML 更新為符合標準的 XHTML 1.0 Transitional。 |
• |
客戶反饋:更改了 ASP.NET 項目模型以響應客戶反饋。 |
• |
正確性:已經在某些情況下增加了浮點精度。這已經作為一種可能性記錄在 CLI 規范中。 |
正如所有的測試版產品一樣,我們正在尋求更多的反饋。如果您遇到有關 Beta 2 產品的問題,請通過 MSDNProductFeedbackCenter 向我們報告。有關部署和兼容性的問題,請發送郵件至 netfxcmp@microsoft.com。我們將根據收到的反饋來更新 .NET Framework 2.0 版本的破壞性更改列表。
應用程序加載機制和可能的問題
默認情況下,使用 .NET Framework 構建的應用程序將使用構建時所用的 Framework 版本(如果已在計算機上安裝該版本)運行。下表指定了目標計算機上不同 .NET Framework 配置下的應用程序的加載行為。
1.1 獨立應用程序(Web 或 Microsoft Windows 客戶端) |
使用 1.1 加載 |
使用 2.0 加載 |
使用 1.1 加載 |
2.0 獨立應用程序(Web 或 Microsoft Windows 客戶端) |
失敗 |
使用 2.0 加載 |
使用 2.0 加載 |
本機應用程序的1.1 外接程序(例如 Office 或 Internet Explorer) |
使用 1.1 加載 |
使用 2.0 加載 |
如果沒有將進程配置為在 1.1 中運行,則使用 2.0 加載 |
本機應用程序的 2.0 外接程序(例如 Office 或 Internet Explorer) |
失敗 |
使用 2.0 加載 |
使用 2.0 加載 |
在通過 .NET Framework 2.0 加載使用 .NET Framework 1.1 構建的應用程序代碼并遇到破壞性更改的情況下,該應用程序可能失敗。在上面的表中,粗體單元格表示可能出現這些情況的地方。以下部分提供有關如何在這些情況下減少潛在問題的信息。
在 .NET Framework 2.0 中測試使用 .NET Framework 1.1 開發的應用程序
由于應用程序將使用構建時所用的 Framework 版本運行,因此有兩種能夠使用 .NET Framework 2.0 運行應用程序的方法:
• |
在只安裝有 .NET Framework 2.0 Beta 2 的計算機上安裝和測試。 |
• |
在已安裝有 .NET Framework 1.1 的計算機上安裝測試版。使用 gotdotnet.com 上概述的步驟強制應用程序使用 .NET Framework 2.0 運行。 |
減少可能的兼容性問題的策略
通過遵循如下所述的其中一個策略,開發人員可以減少應用程序受 .NET Framework 更改影響的可能性。兼容性測試方案中提供有關測試的更多信息。
在發布 .NET Framework 2.0 的最終版本之前,我們將檢查兼容性狀態,并考慮在破壞性更改影響應用程序時還原這些更改。在進行兼容性測試時,如果您發現應用程序需要進行一些更改才能在新版本上正確運行,請在 MSDNProductFeedbackCenter 上記錄錯誤。
1. |
測試和修復 始終進行;推薦
使用由 .NET Framework 1.1 構建的應用程序的一種可能方法是:使用 .NET Framework 2.0 測試該應用程序,進行一些必要的更改,并確保該應用程序在 Framework 的兩個版本上都能運行。
開發和測試含義這將要求小組測試 Framework 的兩個版本,從而擴展應用程序的測試矩陣。它可能還要求開發人員對源代碼進行一些修改,以確保應用程序在 .NET Framework 1.1 和 .NET Framework 2.0 上都能運行。
市場和運營含義應用程序所有者需要與客戶和用戶溝通該問題,并為他們提供兼容 Framework 這兩個版本的應用程序更新版本。 |
2. |
使用 .NET Framework 1.1 部署 用于獨立的托管應用程序
默認情況下,使用 .NET Framework 構建的托管應用程序將使用構建時所用的版本運行。如果已在目標機器上安裝了 .NET Framework 1.1,則不需要更改任何應用程序。要啟用該方案,應用程序所有者應該繼續連同其應用程序一起發布 .NET Framework 1.1,或確保所有目標機器上都安裝有 .NET Framework 1.1。
如果 .NET Framework 應用程序寄宿在本地主機中(例如 Microsoft Office 或 Microsoft Internet Explorer),則該應用程序將使用計算機上安裝的最新 .NET Framework 版本。這可能意味著,構建在 .NET Framework 1.1 上的應用程序可能被強制使用 .NET Framework 2.0 運行。如果您編寫宿主托管代碼的本機應用程序(無論是通過直接宿主還是通過 COM Interop),則可以配置本機 exe 并選擇構建托管代碼時所用的運行庫版本;否則,您的組件需要在計算機上安裝的最新版本上運行。有關更多詳細信息,請參閱以下并行文檔。
開發和測試含義從開發和測試的角度來看,這需要確保在所有機器上安裝 .NET Framework 1.1。如果是寄宿組件(加載托管組件的應用程序),您可能需要修改該應用程序的配置文件,以確保即使在該計算機上安裝了 .NET Framework 2.0,宿主進程也會加載 .NET Framework 1.1。
市場和運營含義從市場和運營的角度來看,這涉及傳達讓用戶安裝 .NET Framework 1.1 的需要。如果是本地主機,當用戶在其系統上安裝 .NET Framework 2.0 時,它可能還需要讓客戶和用戶安裝新版本(或更新應用程序配置文件)。 |
3. |
升級到 2.0: 適用于所有應用程序,但需要安裝 .NET Framework 2.0
希望利用 .NET Framework 2.0 中新功能的開發人員應該升級應用程序以使其適合 .NET Framework 2.0。這包括重新編譯代碼、測試應用程序,以及進行一些必要的更改。
在 Beta 2 中,ASP.NET 開發人員需要了解在項目系統和編譯模型中所作的更改,這些更改可能會影響其應用程序升級到 2.0 的方式;谟脩舴答,我們已經實現了對 ASP.NET 項目升級系統的補充,這意味著大多數應用程序只需要進行最少的更改。
開發和測試含義這需要更新應用程序以使其適應所有破壞性更改、在 .NET Framework 2.0 中測試應用程序,以及修改應用程序以利用所有 .NET Framework 2.0 功能。開發人員需要更新應用程序安裝程序以發布 .NET Framework 2.0。(請注意:在 Beta 2“保持激活”期間,ISV 可能不會重新發布 .NET Framework 2.0。)
市場和運營含義應用程序所有者需要與客戶溝通,并且用戶需要安裝 .NET Framework 2.0 以及更新的應用程序 BITS。 |
潛在熱點
有兩個廣為人知的兼容性方面熱點值得一提:
• |
序列化:.NET Framework 不同版本之間的任何序列化數據都可能不穩定,因為序列化依賴于對象的內部結構。這可能會影響序列化到文件中的數據,或者通過 .NET Remoting 為通信而序列化的數據。我們目前正在版本容錯序列化方面投入精力,預計可以在發布 Visual Studio 2005 和 .NET Framework 2.0 時提供版本容錯序列化。 |
• |
檢查 .NET Framework 的特定版本:應用程序將在安裝時檢查 Framework 的特定版本是否已安裝到計算機上,或者在運行時檢查 Framework 的特定版本是否是版本敏感的 (version-brittle)。這在利用托管代碼的安裝程序中是很常見的考慮。 |
提交要測試的應用程序
我們一直想要擴展用于測試兼容性的應用程序列表,尤其需要業務線應用程序。如果您提交應用程序,將獲得以下服務:
• |
我們將在最新的 Whidbey BITS 上測試您的應用程序。根據測試的兼容性需求,各個應用程序的測試程度會有所不同。 |
• |
我們將向您報告通過/失敗結果和 Microsoft 發現(在失敗情況下)的應用程序問題,以及緩解該問題的建議。 |
• |
我們不承諾確保您的應用程序在最新的 BITS 上正常運行。但是,該成果將幫助我們了解客戶可能經歷的所有兼容性問題。我們將盡力確,F有的應用程序能夠在 .NET Framework 2.0 上正常運行。 |
• |
您負責提供以下內容:應用程序、所有必要的前提(測試數據、其他資源),以及有關如何在全新的計算機上安裝和運行該應用程序的安裝說明。Microsoft 無法測試需要特定于域的資源或者在其中包含真實客戶數據的任何應用程序。 |
付諸行動
• |
在 2.0 上測試您的 1.1 應用程序并找出是否存在問題。通過 MSDNProductFeedbackCenter 報告這些問題。 |
• |
通過 netfxcmp@microsoft.com 提供其他問題(包括兼容性和部署問題)的反饋。 |
• |
提交要測試的更多應用程序。 |
附錄和背景
NET Framework SDK 文檔和文章更詳細地描述了并行問題,以及如何配置您的應用程序以便為特定應用程序模型(例如,.EXE 應用程序、Web 應用程序或托管 COM 組件)運行特定版本的 .NET Framework。
MSDN 文檔
• |
.NET Framework Developer's Guide: Targeting a .NET Framework Version http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpcontargetingnetframeworkversion.asp |
• |
Big Red Switch information on GotDotNet http://www.gotdotnet.com/Community/UserSamples/Details.aspx?SampleGuid=4caff66c-df51-40ab-bd88-090d34e77520 |
• |
.Config file information http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconSpecifyingWhichRuntimeVersionToUse.asp |
• |
Side-by-Side Execution of the .NET Framework http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetdep/html/sidexsidenet.asp |
• |
ASP.NET application in IIS; see .NET Framework Developer's Guide: Configuring an ASP.NET Application for an ASP.NET Version http://msdn.microsoft.com/library/en-us/cpguide/html/cpconconfiguringaspnetapplicationforaspnetversion.asp |
• |
NET Framework Developer's Guide: Side-by-Side Execution for COM Interop http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconSide-By-SideExecutionForCOMInterop.asp |
• |
Compatibility Considerations and Version Changes http://www.gotdotnet.com/team/changeinfo/default.aspx |
并行 Framework 和功能的相關背景
存在多個版本的 .NET Framework(v1.0、v1.1、v2.0)。多個 .NET Framework 版本可以“并行”安裝在同一臺計算機上,同樣,用戶可以安裝諸如 Office 這樣的應用程序的多個版本(例如,在同一臺計算機上安裝 OfficeXP 和 Office2003)。在 Windows XP 和 Windows Server 2003 上,多個 .NET Framework 版本可以在不同的進程中并行運行。換句話說,一個進程可以在 .NET Framework 2.0 上運行應用程序,同時其他進程也可以在 .NET Framework 1.1 上運行應用程序。
.NET Framework 1.0、1.1 和 2.0 上應用程序的并行運行庫行為
托管應用程序:在 .NET Framework 1.0、1.1 或 2.0 上啟動應用程序時,CLR (mscoree) 會查看該應用程序中記錄的 .NET Framework 版本,并嘗試在編譯該應用程序的 .NET Framework 版本上運行該應用程序。如果尚未在計算機上安裝該版本,則 CLR 將嘗試在最新的 .NET Framework 和 CLR 上啟動該應用程序。例如,如果為 .NET Framework 2.0 編譯的應用程序在僅安裝有 .NET Framework 1.1 的計算機上運行,那么該應用程序將向前兼容以便在 .NET Framework 1.1 上運行。同樣,如果為 .NET Framework 1.1 編譯的應用程序在僅安裝有 .NET Framework 2.0 的計算機上運行,那么該應用程序將向后兼容以便在 .NET Framework 2.0 上運行。
本機應用程序的托管組件:本機應用程序的托管組件是在本機 exe 啟動的進程中,直接通過宿主 API 或 COM interop 加載的托管代碼。以這種方式加載托管代碼時有兩個主要方案:
• |
方案 1:托管代碼是本機第三方應用程序的外接程序 |
• |
方案 2:托管代碼是本機應用程序的一部分 |
在這些情況下,默認行為是加載安裝在該計算機上的最新運行庫。
在方案 1 中,您無法了解可能在進程中加載了哪些其他托管組件,因此該托管外接程序無法選擇要加載哪個運行庫,而是必須加載計算機上最新的運行庫。
然而,在方案 2 中,托管代碼實際上是應用程序的一部分,因此開發人員非常清楚該托管代碼需要哪個運行庫。在這些情況下,我們建議由應用程序指定它要加載的運行庫。如果該應用程序宿主了運行庫,那么它應該通過宿主 API 指定準確的運行庫(而不是為空)。如果通過 COM interop 加載托管代碼,那么應用程序開發人員應該在本機 exe 上放置一個配置文件,并讓該配置文件指定某個支持的運行庫。
ASP.NET 應用程序:Web 應用程序彼此不同,因為 .NET Framework 的版本通過配置特定的 IIS 虛擬目錄進行選擇,目的在于通過 IIS 管理工具來使用特定版本的 ASP.NET ISAPI DLL。ASP.NET ISAPI DLL 可以為 Web 應用程序加載相應的 .NET Framework 版本。
|