.netCompactFramework是.NETFramework全功能版的子集。它实现了约30%的.NETFramework全功能版类库,还包含特定于移动开发和嵌入式开发的功能和类。 软件开发网
本主题并没有囊括两个框架间的所有差异,而是列出开发应用程序所需的一些重要差异。
应用程序域 软件开发网
.NETCompactFramework目前不支持将程序集加载到非特定于域的代码区域中供多个.NETCompactFramework中的应用程序域使用。
数组
尽管某些语言支持不为零的数组下界,但是公共语言运行库不提供这样支持,当第一个元素不是0时,它将引发MissingMethodException。
软件开发网
ASP.NET 软件开发网
.NETCompactFramework主要是胖客户端平台,不提供ASP.NET支持。要开发用于移动设备的网页,可以使用ASP.NET移动Web控件。要开发用于个人计算机或Web服务提供程序的网页,请参见ASP.NET文档。 软件开发网
程序集和文件格式
软件开发网
这两个Framework的应用程序都使用程序集。这两个Framework都访问可移植可执行(PE)文件,这类文件包含Microsoft中间语言(MSIL)和定义.NETFramework应用程序的元数据。PE文件可以引用由其他程序集文件定义和共享的编程命名空间。 软件开发网
有关更多信息,请参见与.NETFramework全功能版的二进制兼容性。
程序集和全局程序集缓存
.NETCompactFramework目前不支持多模块程序集,但确实支持附属程序集。
类和类型 软件开发网
.NETCompactFramework支持.NETFramework类库的一个子集。此子集适合于旨在资源受限制的设备上运行的应用程序,并且在语义上与.NETFramework中的同名类兼容。
有关确定.NETCompactFramework支持内容的信息,请参见如何:使用.NETCompactFramework的类库。
COMInterop 软件开发网
.NETCompactFramework2.0版支持COMinterop。该版本还具有增强的封送功能。有关更多信息,请参见.NETCompactFramework中的互操作性。
公共语言运行库
软件开发网
这两个Framework中的公共语言运行库都具有托管代码执行、实时(JIT)代码编译和垃圾回收的优点。它们支持公共语言规范(CLS)。
这两个Framework都有内置的基元类型,以及其他在生成应用程序时可以使用和派生新类型的类型。
.NETCompactFramework的公共语言运行库的大小大约是.NETFramework全功能版公共语言运行库的12%。
控件
.NETCompactFramework支持.NETFramework全功能版中的大部分Windows窗体控件,并且包含特定于.NETCompactFramework的控件。
http://www.mscto.com
Windows窗体控是专门为.NETCompactFramework生成的。有关更多信息,请参见.NETCompactFramework中的控件。
当前目录
WindowsCE操作系统中不存在当前目录的功能,因此.NETCompactFramework不支持GetCurrentDirectory和SetCurrentDirectory方法。
.NETCompactFramework支持ProcessStartInfo的WorkingDirectory属性。但是,后续启动和文件加载时运行的可执行文件不保留该属性的上下文。
数据 软件开发网
.NETCompactFramework提供ADO.NET的子集实现并且包含SQLServerMobile数据提供程序。System.Data.OleDb命名空间不受支持。
有关数据支持的更多信息,请参见数据访问和XML支持
数据类型和浮点精度
.NETCompactFramework不支持MidpointRounding枚举。
软件开发网
在除法运算中,如果除数非常大或是最大浮点值,或者除数非常小或是最小浮点值,则运算返回零而不是正确的计算结果。
MIPS平台不支持二进制浮点算术标准规范指定的完全精度,可能会导致不可预知的结果。出于性能考虑,.NETCompactFramework不为此平台提供浮点模拟功能。 软件开发网
在命令提示符处进行调试
.NETCompactFramework不支持.NETFramework2.0版提供的新的.NETFramework命令行调试器(MDbg.exe)。两个Framework的2.0版都否决了旧的CLR调试器(DbgCLR.exe)。
部署应用程序
部署非常容易,只需通过以下几种方式之一将程序集复制到目标设备即可:使用桌面计算机的电缆连接或红外端口连接;使用无线Internet或Intranet连接。在MicrosoftVisualStudio2005中,可在调试时直接部署到设备。 http://www.mscto.com
诊断跟踪
.NETCompactFramework不支持用于跟踪的配置文件,但您可以使用性能计数器。有关更多信息,请参见性能和诊断。
已释放对象 软件开发网
.NETFramework全功能版不保证对已释放对象的属性或方法的访问总能成功。但是,在.NETFramework中访问Text之类的某些属性通常确实能够成功。由于.NETFramework与.NETCompactFramework之间的实现差异,在.NETCompactFramework中访问已释放对象的方法或属性差不多总是失败。
编码和本地化
本地化或全球化支持(如适合于区域设置的日期格式和排序表)尽可能服从基础操作系统以实现兼容性和精简高效。 http://www.mscto.com
.NETCompactFramework依赖于操作系统进行数据排序,因此对于某些区域性,有可能出现意外的排序结果。 http://www.mscto.com
.NETCompactFramework不支持每个线程一个CurrentUICulture设置。
有关全球化支持的更多信息,请参见.NETCompactFramework中的编码和本地化。 软件开发网
事件
.NETCompactFramework支持GotFocus和LostFocus事件,但不支持Activated和Deactivated事件。
异常说明字符串
.NETCompactFramework在一个单独的DLL(System.SR.DLL)中提供异常错误消息字符串,从而可以节省内存。
也可以提供适合其他区域性的异常字符串,使应用程序得以本地化。
文件名和路径
软件开发网
WindowsCE将未指定路径信息的文件名解析为位于设备的根目录下,而不是在应用程序目录下。
为了确保操作成功,请指定绝对路径信息。
.netCompactFramework处理以file://方案为前缀的URI字符串的方式与.NETFramework全功能版不同。相对的file://myfile解析为//myfile。使用file:///myfile(三个斜杠)将解析为根目录中的/myfile。
可通过Version获取程序集的版本,但其支持依赖于设备制造商,并且无法保证。
若要获取包含应用程序的目录的名称,请参见如何:获取应用程序目录。
高分辨率
在.NETCompactFramework2.0版中,将在VisualStudio2005项目中自动处理DPI分辨率。有关高分辨率的更多信息,请参见如何:处理方向和分辨率更改。
输入/输出(I/O)
由于设备操作系统的差异,I/O模型存在约束和限制。.NETCompactFramework不提供文件更改通知。
由于设备I/O在RAM中发生,因此无法设置或访问文件和目录属性。
安装和CAB文件
可以使用CAB文件并创建MSI应用程序来分发应用程序。
语言
.NETCompactFramework支持使用VisualBasic和VisualC#进行开发,但是目前不支持C 。
Math
并不是所有的Math方法在所有的设备平台上都可以得到支持,但为了兼容起见,将这些方法包括在API中。
内存
.NETCompactFramework经过了优化,特别适合于用电池供电的系统,并且避免了高强度地使用RAM和CPU周期。有关节省内存的更多信息,请参见设备内存管理和如何:提高性能。
网络
.NETCompactFramework提供了用于建立红外连接的“红外数据协会”(IrDA)类,以及用于为设备的HTTP请求提供服务的Web侦听类。这些类仅在.NETCompactFramework中可用。有关更多信息,请参见网络和连接。
性能测试
.NETCompactFramework不支持代码分析或系统监视器中的Perfmon.exe文件。但是,您可以使用性能计数器。请参见
性能和诊断了解更多信息。
代理代码
.NETCompactFramework不支持所有由Web服务描述语言工具(Wsdl.exe)生成的代码。若要确定不支持哪些代码,请参见如何:使用Wsdl.exe生成的代理。 http://www.mscto.com
反射 软件开发网
.NETCompactFramework不支持System.Reflection.Emit命名空间。
软件开发网
在比较MethodInfo、FieldInfo、PropertyInfo、EventInfo、MemberInfo、MethodBase、ConstructorInfo和ParameterInfo等反射对象时,.NETCompactFramework目前不支持相等运算符(==)。作为替代方法,请参见实现Equals方法。
远程处理
.NETCompactFramework不支持远程处理。可以为其他解决方案使用.NETCompactFramework中的消息队列。
安全消息传递
.NETCompactFramework不支持使用HTTPS的客户端证书和身份验证。使用基本身份验证。
安全性
.NETCompactFramework中的安全中介绍了一些重要的安全性差异和注意事项。
序列化 软件开发网
出于大小和性能方面的考虑,.NETCompactFramework不支持使用BinaryFormatter的二进制序列化和使用SoapFormatter的SOAP序列化。 软件开发网
但是,对于在XMLWebServices中使用SOAP传输对象数据提供序列化支持,并且支持将数据集序列化为XML。
大小 http://www.mscto.com
.NETCompactFramework的大小是.NetFramework全功能版可再发行包的8%。由于WindowsCE文件系统压缩,因此,在磁盘上的大小要小50%。 http://www.mscto.com
套接字
不是所有的套接字选项都受支持。有关更多信息,请参见套接字编程。 软件开发网
字符串处理,正则表达式
软件开发网
使用.NETCompactFramework的正则表达式的应用程序与使用.NETFramework全功能版的正则表达式的应用程序的二进制代码不兼容,但它们的源代码兼容。
线程
一个.NETCompactFramework应用程序最多可以创建四个线程:
主应用程序线程。
用来控制可由系统或应用程序安排的各种时间段计时器和超时的线程。 软件开发网
用来跟踪活动TCP/IP接口更改的线程(模拟WindowsXP中提供而WindowsCE中未提供的介质检测行为)。
用来运行对象终结器的线程。在对第一个可终结对象进行垃圾回收时创建该线程。 http://www.mscto.com
有关线程处理支持的更多信息,请参见.NETCompactFramework中的线程处理。
时间间隔 软件开发网
Now返回的值只精确到秒而不是毫秒。可以使用TickCount属性获得更精确的度量值。
软件开发网
计时器
不支持System.Timers.Timer的Start和Stop方法,但是,将System.Windows.Forms.Timer的Enabled属性设置为true或false,可以启动和停止计时。
软件开发网
VisualBasicMy
.NETCompactFramework支持VisualBasic的My功能(请参见使用My开发),但下列My对象除外:
My.Application My.Computer My.User My.Settings
Web服务
Web服务客户端直接运行wsdl.exe生成的程序集。
请不要使用localhost在设备上创建Web服务,因为localhost是指运行应用程序的设备,即该设备本身。应使用计算机名称或其IP地址。
XML
出于大小方面的考虑,.NETCompactFramework不支持XML架构验证。它确实支持XML文档对象模型(DOM)。有关更多信息,请参见数据访问和XML支持。