.NET Compact Framework 和 .NET Framework 之間的差異
更新:2007 年 11 月
.NET Compact Framework 是完整 .NET Framework 的子集。它大約會實作完整 .NET Framework 類別庫的 30%,並包含行動和內嵌程式開發的特定功能及類別。
本主題將不會說明兩個 Framework 版本之間的所有差異,不過會列出開發應用程式的重要考量。
應用程式定義域
.NET Compact Framework 目前不支援將組件載入至定義域中性方式 (Domain-Neutral) 的程式碼區域,以供多重應用程式定義域使用。如需詳細資訊,請參閱 .NET Compact Framework 中的應用程式定義域。
陣列
雖然有些語言支援非零的下限,但 Common Language Runtime (CLR) 並不支援,而且會在第一個項目不是零時,擲回 MissingMethodException。
ASP.NET
.NET Compact Framework 主要是豐富型用戶端 (Rich Client) 的平台,並不支援 ASP.NET。若要開發行動裝置的網頁,可使用 ASP.NET Mobile Web 控制項。若要開發個人電腦或 Web 服務供應商的 Web 網頁,請參閱您的 ASP.NET 文件。
組件和檔案格式
兩種 Framework 的應用程式都使用組件,兩者皆可存取可攜式執行檔案 (PE),該檔案包含定義 .NET Framework 應用程式的 Microsoft Intermediate Language (MSIL) 和中繼資料 (Metadata)。PE 檔可參考由其他組件檔所定義和共用的程式設計命名空間。如需詳細資訊,請參閱與完整 .NET Framework 的二進位碼相容性。
組件和全域組件快取
.NET Compact Framework 目前雖不支援多模組組件,但支援附屬組件。
類別和型別
.NET Compact Framework 支援 .NET Framework 類別庫的子集。此子集適合專為在有限資源裝置上執行所設計的應用程式使用,而且在語意上與 .NET Framework 內的同名類別相容。
如需如何判斷 .NET Compact Framework 支援的詳細資訊,請參閱 HOW TO:在類別庫中尋找 .NET Compact Framework 的支援成員。
COM Interop
如需有關 .NET Compact Framework 與完整 .NET Framework 之間 COM Interop 及封送處理的差異,請參閱 .NET Compact Framework 中的互通性。
Common Language Runtime
兩種 Framework 中的 Common Language Runtime 都具有 Managed 程式碼執行、Just-In-Time (JIT) 程式碼編譯和記憶體回收的優勢。它們都支援 Common Language Specification (CLS)。
兩種 Framework 都含有內建基本型別 (Primitive Type),以及您可在建置應用程式時使用和衍生的其他型別。
.NET Compact Framework 的 Common Language Runtime 大小,約為完整 .NET Framework Common Language Runtime 的 12%。
控制項
.NET Compact Framework 支援完整 .NET Framework 提供的大部分 Windows Form 控制項,並且包含 .NET Compact Framework 專屬的控制項。
Windows Form 控制項是特別針對 .NET Compact Framework 所建置。如需詳細資訊,請參閱.NET Compact Framework 中的控制項。
目前的目錄
目前目錄的功能不會出現在 Windows Embedded CE 作業系統中。因此,.NET Compact Framework 不支援 GetCurrentDirectory 和 SetCurrentDirectory 方法。
.NET Compact Framework 支援 ProcessStartInfo 物件的 WorkingDirectory 屬性。不過,屬性內容不會因為在後續的啟動和檔案載入時執行可執行檔而保留。
資料
.NET Compact Framework 提供 ADO.NET 的子集實作並且包含 SQL Server Mobile 資料提供者。不支援 System.Data.OleDb 命名空間。如需有關資料支援的詳細資訊,請參閱 .NET Compact Framework 中的資料存取和 XML 支援。
資料型別和浮點精確度
.NET Compact Framework 不支援 MidpointRounding 列舉型別。
在除法計算中,如果除數非常大或最大的浮點值,或是非常小或最小的浮點值,則計算結果會傳回 0 (零) 而非正確的計算結果。
MIPS 平台不支援二進位浮點運算標準 (IEEE 754) 所指定的完整精確度,而且可能會導致無法預期的結果。由於效能上的考量,.NET Compact Framework 並未為此平台提供浮點模擬功能。
委派
不支援非同步委派,尤其是 BeginInvoke 和 EndInvoke 方法。如需詳細資訊,請參閱使用委派非同步設計程式。
部署應用程式
若要部署應用程式,只要使用桌上型電腦的纜線、紅外線連接埠,或是無線網際網路或內部網路連線將組件複製到目標裝置即可。在 Microsoft Visual Studio 2005 中,您可以在偵錯時直接將應用程式部署至裝置。
診斷追蹤
.NET Compact Framework 不支援使用組態檔進行追蹤,不過您可以使用效能計數器。如需詳細資訊,請參閱.NET Compact Framework 中的效能和診斷。
已處置的物件
完整 .NET Framework 不能保證存取已處置物件上的屬性或方法一定能成功。不過,在 .NET Framework 上,通常能夠順利存取 Text 等屬性。由於兩個版本的 Framework 之間在實作上的差異,因此在 .NET Compact Framework 上存取已處置物件的方法或屬性幾乎一定會失敗。
編碼和當地語系化
適合地區設定的當地語系化 (全球化) 支援 (例如,日期格式化和排序表格),只要在相容性和檔案大小處理效率許可的情況下,都必須依照對應的作業系統進行設定。
.NET Compact Framework 會根據作業系統排序資料。因此,排序可能會在某些文化特性下產生非預期的結果。
.NET Compact Framework 並不支援個別執行緒的 CurrentUICulture 設定。
如需當地語系化支援的詳細資訊,請參閱 .NET Compact Framework 中的編碼和當地語系化。
事件
.NET Compact Framework 支援 GotFocus 和 LostFocus 事件,不過不支援 Activated 和 Deactivated 事件。
例外狀況說明字串
.NET Compact Framework 會在另一個稱為 System.SR.dll 的 DLL 中提供例外狀況的錯誤訊息字串,以節省記憶體。
您也可以為其他文化特性提供例外狀況字串,以便將應用程式當地語系化。
檔案名稱和路徑
Windows Embedded CE 會解析所指定的檔名,但不包含路徑資訊,就如同位於裝置的根目錄,而非位於應用程式目錄。若要確保作業成功,請指定絕對路徑的資訊。
.NET Compact Framework 會處理前置 file:// 的統一資源識別元 (URI) 字串,其方式與完整 .NET Framework 不同。相對規格如 file://myfile 會解析為 \\myfile。URI 字串 file:///myfile (含有三個正斜線) 會解析為根目錄中的 \myfile。
您可以使用 Version 屬性取得組件版本,不過其支援是根據裝置的製造商,而且無法保證。
若要取得含有應用程式之目錄的名稱,請參閱 HOW TO:取得應用程式目錄。
高解析度
在 .NET Compact Framework 2.0 和之後的版本中,DPI 解析會在 Visual Studio 專案中自動處理。如需高解析度的詳細資訊,請參閱 HOW TO:處理方向和解析度變更。
輸入/輸出 (I/O)
由於裝置作業系統的差異,I/O 模型有一些約束和限制。.NET Compact Framework 在檔案有所變更時不提供通知。
由於裝置 I/O 發生於 RAM 中,因此無法設定或存取檔案和目錄屬性。
安裝和 CAB 檔案
您可以使用 CAB 檔並建立 Microsoft Windows Installer 應用程式散發應用程式。
語言
Compact 支援使用 Visual Basic 和 Visual C# 開發,不過目前不支援 C++。
數學
並非所有裝置平台上都支援所有數學方法,不過這些方法會包含在 API 以達到相容性。
記憶體
.NET Compact Framework 已針對電池式的系統作最佳化,並避免過度使用 RAM 和 CPU 處理循環。如需如何節省記憶體的詳細資訊,請參閱.NET Compact Framework 中的裝置記憶體管理和 HOW TO:改善效能。
網路
.NET Compact Framework 提供可建立紅外線連接的紅外線資料關聯 (IrDA) 類別,以及用於服務對裝置發出之 HTTP 要求的 Web 聆聽 (Web Listening) 類別。這些類別只能在 .NET Compact Framework 使用。如需詳細資訊,請參閱.NET Compact Framework 中的網路和連接。
Proxy 程式碼
.NET Compact Framework 並不支援由 Web 服務描述語言工具 (Wsdl.exe) 產生的所有程式碼。若要判斷不支援哪個程式碼,請參閱 HOW TO:使用由 Wsdl.exe 產生的 Proxy。
反映
.NET Compact Framework 不支援 System.Reflection.Emit 命名空間。
.NET Compact Framework 目前並不支援在比較 MethodInfo、FieldInfo、PropertyInfo、EventInfo、MemberInfo、MethodBase、ConstructorInfo 和 ParameterInfo 等反映物件時使用等號比較運算子 (==)。除此之外,您也可以參閱實作 Equals 方法。
遠端處理
.NET Compact Framework 不支援遠端處理。如需替代解決方案,請參閱 .NET Compact Framework 中的訊息佇列。
安全性
安全性差異和考量將在 .NET Compact Framework 中的安全性 中加以說明。
序列化
因為大小和效能的考量,所以 .NET Compact Framework 不支援利用 BinaryFormatter 進行二進位序列化,或利用 SoapFormatter 進行 SOAP 序列化。
不過,.NET Compact Framework 不提供在 XML Web 服務中使用 SOAP 傳輸物件資料,以及將資料集序列化為 XML 的序列化支援。
大小
.NET Compact Framework 為完整 .NET Framework 可轉散發套件大小的 8%。由於 Windows Embedded CE 檔案系統的壓縮,所以在磁碟上的大小會減少 50%。
通訊端
並不支援所有通訊端 (Socket) 選項。如需詳細資訊,請參閱通訊端程式設計。
字串管理、規則運算式
.NET Compact Framework 中使用規則運算式的應用程式,與完整 .NET Framework 中使用規則運算式的應用程式兩者的二進位檔並不相容,但是可與原始程式碼相容。
執行緒
.NET Compact Framework 應用程式最多會建立四個執行緒:
主應用程式執行緒。
用來控制項各種可由系統或應用程式加以排程之週期計時器和逾時的執行緒。
用來追蹤現用 TCP/IP 介面 (模擬 Windows XP 上存在但 Windows Embedded CE 上不存在的媒體感知行為) 之變更的執行緒。
用來執行物件完成項的執行緒。當第一個可最終處理的物件被記憶體回收後,就會建立這個執行緒。
如需執行緒支援的詳細資訊,請參閱 .NET Compact Framework 中的執行緒。
時間間隔
Now 屬性會傳回秒數專屬的值,而非毫秒專屬。您可以藉由使用 TickCount 屬性取得更精確的計算單位。
計時器
雖然不支援 System.Timers.Timer 物件的 Start 和 Stop 方法,不過您可以將 System.Windows.Forms.Timer 物件的 Enabled 屬性設定為 true 或 false 以開始和停止計時。
Visual Basic My
Compact 可支援 Visual BasicMy 功能 (請參閱使用 My 進行開發),但下列 My 物件除外:
My.Application
My.Computer
My.User
My.Settings
Web 服務
Web 服務用戶端會執行由 wsdl.exe 直接產生的組件。
請勿使用 localhost 在裝置上建立 Web 服務,因為 localhost 會參考執行應用程式的裝置。所以您應該使用電腦的名稱或 IP 位址。
XML
由於大小的考量,所以 .NET Compact Framework 無法支援 XML 結構描述驗證。但它有支援 XML 文件物件模型 (DOM)。如需詳細資訊,請參閱.NET Compact Framework 中的資料存取和 XML 支援。