NET Compact Framework 与 .NET Framework 之间的差异
.NET Compact Framework 是 .NET Framework 全功能版的一个子集。它实现了 .NET Framework 全功能版中约 30% 的类库,还包含特定于移动开发和嵌入式开发的功能和类。
本主题并未详尽两个 Framework 之间的所有差异,而是列出了使用它们开发应用程序时的重要注意事项。
应用程序域
.NET Compact Framework
目前并不支持将程序集加载到非特定于域的代码区域中以供多个应用程序域使用。有关更多信息,请参见 .NET Compact Framework
中的应用程序域。
数组
尽管某些语言支持不为零的数组下界,但是公共语言运行时 (CLR) 并不提供这种支持,如果第一个元素不为零,它将引发
MissingMethodException。
ASP.NET
.NET Compact Framework 主要是一个胖客户端平台,它并不提供 ASP.NET
支持。若要开发用于移动设备的网页,可以使用 ASP.NET 移动 Web 控件。若要开发用于个人计算机或 Web 服务提供程序的网页,请参见 ASP.NET
文档。
程序集和文件格式
这两个 Framework 的应用程序都使用程序集。这两个 Framework 都访问可移植可执行 (PE) 文件,这类文件包含
Microsoft 中间语言 (MSIL) 和定义 .NET Framework 应用程序的元数据。PE
文件可以引用由其他程序集文件定义和共享的编程命名空间。有关更多信息,请参见与 .NET Framework 全功能版的二进制兼容性。
程序集和全局程序集缓存
.NET Compact Framework 目前不支持多模块程序集,但确实支持附属程序集。
类和类型
.NET Compact Framework 支持 .NET Framework
类库的子集。此子集适用于专门在资源受限制的设备上运行的应用程序,并且在语义上与 .NET Framework 中的同名类兼容。
有关如何确定 .NET Compact Framework 支持的信息,请参见如何:在类库中查找受支持的 .NET Compact Framework 成员。
COM 互操作
有关 .NET Compact Framework 和 .NET Framework 全功能版的 COM
互操作和封送处理之间的差异,请参见 .NET Compact Framework 中的互操作性。
公共语言运行时
这两个 Framework 中的公共语言运行时都具有托管代码执行、实时 (JIT) 代码编译和垃圾回收的优点。它们支持公共语言规范
(CLS)。
这两个 Framework 都有内置的基元类型,以及其他在生成应用程序时可以使用和派生新类型的类型。
.NET Compact Framework 的公共语言运行时大小约为 .NET Framework 全功能版公共语言运行时的 12%。
控件
.NET Compact Framework 支持 .NET Framework 全功能版提供的大部分 Windows
窗体控件,并且包含特定于 .NET Compact Framework 的控件。
Windows 窗体控件是专门为 .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 方法。有关更多信息,请参见 使用委托进行异步编程。
部署应用程序
若要部署应用程序,只需通过以下方式之一轻松地将程序集复制到目标设备即可:使用台式计算机的电缆连接或红外端口连接;使用无线
Internet 或 Intranet 连接。在 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 在单独的 DLL(称为
System.SR.dll)中提供异常错误消息字符串,从而可以节省内存。
也可以提供适合其他区域性的异常字符串,使应用程序得以本地化。
文件名和路径
Windows Embedded CE
将未指定路径信息的文件名解析为位于设备的根目录下,而不是位于应用程序目录下。为了确保操作成功,请指定绝对路径信息。
.NET Compact Framework 处理带 file:// 前缀的统一资源标识符 (URI) 字符串的方式与 .NET Framework 全功能版不同。指定的相对路径(例如 file://myfile)将解析为 \\myfile。URI 字符串 file:///myfile(带三个正斜杠)将解析为根目录中的 \myfile。
可通过 Version 属性获取程序集的版本,但其支持依赖于设备制造商,并且无法保证。
若要获取包含应用程序的目录的名称,请参见如何:获取应用程序目录。
高分辨率
在 .NET Compact Framework 2.0 和更高版本中,Visual Studio 项目中会自动处理 DPI
分辨率。有关高分辨率的更多信息,请参见如何:处理方向和分辨率更改。
输入/输出 (I/O)
由于设备操作系统的差异,I/O 模型存在约束和限制。.NET Compact Framework
不提供文件更改通知。
由于设备 I/O 在 RAM 中发生,因此无法设置或访问文件和目录属性。
安装和 CAB 文件
可以使用 CAB 文件并创建 Microsoft Windows Installer 应用程序来分发应用程序。
语言
精简版本支持使用 Visual Basic 和 Visual C# 进行开发,但目前尚不支持 C++。
Math
并不是所有的 Math 方法在所有设备平台上都可以得到支持,但为了兼容起见,这些方法都包括在 API 中。
内存
.NET Compact Framework 已经过优化,特别适合于用电池供电的系统,并且避免了高强度地使用 RAM 和 CPU
周期。有关如何节省内存的更多信息,请参见 .NET Compact Framework 中的设备内存管理和如何:提高性能。
网络
.NET Compact Framework 提供了用于建立红外连接的“红外数据协会”(IrDA) 类,以及用于为设备的 HTTP
请求提供服务的 Web 侦听类。仅在 .NET Compact Framework 中提供这些类。有关更多信息,请参见 .NET Compact
Framework 中的网络和连接。
代理代码
.NET Compact Framework 不支持 Web 服务描述语言工具 (Wsdl.exe)
生成的所有代码。若要确定哪些代码不受支持,请参见如何:使用 Wsdl.exe 生成的代理。
反射
.NET Compact Framework 不支持 System.Reflection.Emit 命名空间。
目前,在比较 MethodInfo、FieldInfo、PropertyInfo、EventInfo、MemberInfo、MethodBase、ConstructorInfo 和 ParameterInfo 等反射对象时,.NET Compact Framework 不支持相等运算符 (==)。作为替代方法,请参见实现 Equals 方法。
远程处理
.NET Compact Framework 不支持远程处理。有关替代解决方案,请参见 .NET Compact Framework
中的消息队列。
安全性
有关安全性差异和注意事项,请参见 .NET Compact Framework 中的安全。
序列化
出于大小和性能方面的考虑,.NET Compact Framework 不支持使用 BinaryFormatter 的二进制序列化或使用
SoapFormatter 的 SOAP 序列化。
但是,.NET Compact Framework 确实可在使用 SOAP 在 XML Web services 中传输对象数据时提供序列化支持,并支持将数据集序列化为 XML。
大小
.NET Compact Framework 的大小是 .NET Framework 全功能版可再发行包的 8%。经 Windows
Embedded CE 文件系统压缩后,它在磁盘上的大小要小 50%。
套接字
不是所有的套接字选项都受支持。有关更多信息,请参见套接字编程。
字符串处理,正则表达式
使用 .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
精简版支持 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 支持。
NET Compact Framework 概述
.NET Compact Framework
建立了用来在设备上运行托管应用程序的环境。它提供对设备的基础功能的访问。另外,应用程序和组件可以在设备上和通过 Internet 交互。
本节内容
.NET Compact Framework 体系结构概述
描述 .NET Compact Framework
的核心组件和功能。
.NET Compact Framework 与 .NET Framework 之间的差异
概述 .NET Compact Framework 与
.NET Framework 全功能版(桌面版)之间的差异。
.NET Compact Framework 中受支持的类
提供 .NET Compact Framework
支持的命名空间、类和其他类型的概述,同时列出了仅在 .NET Compact Framework 中可用的类型。
.NET Compact Framework 支持的设备和平台
列出可运行 .NET Compact Framework
的设备平台和操作系统。
.NET Compact Framework 开发人员模型
描述针对特定或多个设备类别的编程模型。
.NET Compact Framework 程序集和文件
描述程序集文件及其与 .NET Framework 全功能版的二进制兼容性。
Visual Studio 和 .NET Compact Framework
描述可如何使用 Visual Studio 开发 .NET
Compact Framework 应用程序。
NET Compact Framework
Microsoft .NET Compact Framework 是 Windows Mobile 和 Windows Embedded CE
设备上不可缺少的组件,可用于构建并运行托管应用程序以及使用 Web 服务。.NET Compact Framework 包括优化的公共语言运行库 (CLR)
以及 .NET Framework 类库的子集,该子集支持 Windows Communication Foundation (WCF) 和 Windows
窗体等功能。此外,它还包含专门供 .NET Compact Framework 使用的类。
.NET Compact Framework 继承了 CLR 和托管代码执行的 .NET Framework 全功能版的体系结构。有关 .NET Compact Framework 的体系结构的更多信息,请参见 .NET Compact Framework 体系结构概述。
.NET Compact Framework 支持 Visual Basic 和 Visual C# 开发。它当前不支持 C++ 开发。
说明:
本文档假定您对 .NET Framework 有一个大概的了解。文中主要对特别重要的或 .NET Compact Framework
特有的技术和组件进行说明。对于与 .NET Framework 全功能版共有的主题,.NET Compact Framework
文档不再重复说明。例如,.NET Compact Framework 使用的类库文档与 .NET Framework 全功能版的相同。
有关 .NET Compact Framework 的其他信息,请参见以下内容:
使用 .NET Compact Framework 进行设备编程。
.NET Compact Framework Developer Center Web site(.NET Compact Framework 开发中心网站)。
本节内容
.NET Compact Framework 帮助主题
提供指向 .NET Compact Framework
文档中的代码示例主题和过程的链接。
.NET Compact Framework 中的新增功能
概述 .NET Compact Framework 中引入的特性和功能。
.NET Compact Framework 概述
描述 .NET Compact Framework 的体系结构、.NET Compact
Framework 和 .NET Framework 全功能版之间的差异以及 .NET Compact Framework 程序集和文件。
如何:在类库中查找受支持的 .NET Compact Framework 成员
提供筛选类库以显示 .NET Compact Framework
中可用的类的过程,并说明如何确定支持和版本。
.NET Compact Framework 中的应用程序开发
提供有关如何将 .NET Compact Framework
用于各种技术和设备平台的信息。
.NET Compact Framework 的外部资源
提供有关有助于应用程序开发的外部资源的信息。
相关章节
.NET Compact Framework 应用程序示例
包含用于 Pocket PC 的可下载游戏和应用程序。
.NET Compact Framework 技术示例
包含用于演示 .NET Compact Framework
的特性和功能的可下载示例。
使用 .NET Compact Framework 进行设备编程
提供有关在 Visual Studio 中用 .NET Compact
Framework 开发智能设备应用程序的信息。
NET Compact Framework 的外部资源
以下资源提供了有关如何使用 .NET Compact Framework 开发应用程序的附加信息。
.NET Compact Framework
如果 ROM 中还没有 .NET Compact Framework 或者您需要将其从 1.0 或
2.0 版升级到 3.5 版,则必须在移动设备上安装 Microsoft .NET Compact Framework 3.5 可再发行组件。此软件包含运行
.NET Compact Framework 1.0、2.0 和 3.5 应用程序所需的所有组件。若要下载该软件,请访问 Microsoft 下载中心的
.NET Compact Framework 下载。
移动开发中心
有关移动设备和嵌入式设备的应用程序开发的最新信息,请访问 Microsoft .NET Framework Developer
Center(Microsoft .NET Framework 开发人员中心)。若想获取下载、Service
Pack、产品信息、评论、技术文章、社区新闻组和其他资源,请访问 NET Compact Framework 页。
此外 Mobile Developer Center(移动开发人员中心)还提供有关 Windows Mobile SDK 的信息和下载。
Windows Mobile SDK
如果要创建用于 Windows Mobile 设备的应用程序,所需的 SDK 版本取决于目标平台。有关
Visual Studio 和 Windows Mobile SDK 的更多信息,请参见 Visual Studio 和 .NET Compact
Framework。
说明:
若要使用 .NET Compact Framework 2.0 或 3.5 版开发用于 Smartphone 的应用程序,需要
Windows Mobile 5.0 SDK for Smartphone 或 Windows Mobile 6 Standard SDK。
Microsoft.WindowsMobile 类库是构成 Microsoft Windows Mobile SDK 的托管部分的一组类、枚举和委托。下列命名空间只能作为 Windows Mobile SDK 的一部分提供。
命名空间
说明
Microsoft.WindowsMobile.Configuration
提供一个用于测试 XML
配置文件的设计的类,这些配置文件用于配置移动设备。
Microsoft.WindowsMobile.Forms
提供用于创建自定义对话框的一些类,这些对话框用于选择联系人及选择图片。
Microsoft.WindowsMobile.PocketOutlook
提供一些类,这些类使您可以在
Pocket PC 和 Smartphone 上创建并访问约会、任务、联系人、MAPI 消息及 SMS
消息。
Microsoft.WindowsMobile.PocketOutlook.MessageInterception
提供允许访问消息处理机制的类,用于自动截获其属性与特定条件相匹配的传入的
SMS
消息,然后启动应用程序来处理这些消息。
Microsoft.WindowsMobile.Status
提供一些类、委托和枚举,用于访问和维护系统属性,并用于定义要根据所定义的条件采取的编程操作。
Microsoft.WindowsMobile.Telephony
提供一个具有用于拨打电话的方法的类。
NET Compact Framework 支持的设备和平台
.NET Compact Framework 可用作所有 Microsoft 智能设备(包括 Pocket PC 设备、Pocket PC Phone Edition、Smartphone 设备以及其他安装有 Windows Embedded CE 的设备)中的操作系统组件。