扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
本文并没有囊括两个框架间的所有差异,而是列出开发应用程序所需的一些重要差异。
应用程序域
.NET Compact Framework 目前不支持将程序集加载到非特定于域的代码区域中供多个 .NET Compact Framework 中的应用程序域 使用。
数组
尽管某些语言支持不为零的数组下界,但是公共语言运行库不提供这样支持,当第一个元素不是 0 时,它将引发 MissingMethodException。
.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 Interop
.NET Compact Framework 2.0 版支持 COM interop。该版本还具有增强的封送功能。有关更多信息,请参见 .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 CE 操作系统中不存在当前目录的功能,因此 .NET Compact Framework 不支持 GetCurrentDirectory 和 SetCurrentDirectory 方法。
.NET Compact Framework 支持 ProcessStartInfo 的 WorkingDirectory 属性。但是,后续启动和文件加载时运行的可执行文件不保留该属性的上下文。
数据
.NET Compact Framework 提供 ADO.NET 的子集实现并且包含 SQL Server Mobile 数据提供程序。System.Data.OleDb 命名空间不受支持。
有关数据支持的更多信息,请参见数据访问和 XML 支持
数据类型和浮点精度
.NET Compact Framework 不支持 MidpointRounding 枚举。
在除法运算中,如果除数非常大或是最大浮点值,或者除数非常小或是最小浮点值,则运算返回零而不是正确的计算结果。
MIPS 平台不支持二进制浮点算术标准规范指定的完全精度,可能会导致不可预知的结果。出于性能考虑,.NET Compact Framework 不为此平台提供浮点模拟功能。
在命令提示符处进行调试
.NET Compact Framework 不支持 .NET Framework 2.0 版提供的新的 .NET Framework 命令行调试器 (MDbg.exe)。两个 Framework 的 2.0 版都否决了旧的 CLR 调试器 (DbgCLR.exe)。
部署应用程序
部署非常容易,只需通过以下几种方式之一将程序集复制到目标设备即可:使用桌面计算机的电缆连接或红外端口连接;使用无线 Internet 或 Intranet 连接。在 Microsoft Visual Studio 2005 中,可在调试时直接部署到设备。 诊断跟踪
.NET Compact Framework 不支持用于跟踪的配置文件,但您可以使用性能计数器。有关更多信息,请参见性能和诊断。
已释放对象
.NET Framework 全功能版不保证对已释放对象的属性或方法的访问总能成功。但是,在 .NET Framework 中访问 Text 之类的某些属性通常确实能够成功。由于 .NET Framework 与 .NET Compact 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 CE 将未指定路径信息的文件名解析为位于设备的根目录下,而不是在应用程序目录下。
为了确保操作成功,请指定绝对路径信息。
.NET Compact Framework 处理以 file:// 方案为前缀的 URI 字符串的方式与 .NET Framework 全功能版不同。相对的 file://myfile 解析为 \\myfile。使用 file:///myfile(三个斜杠)将解析为根目录中的 \myfile。
可通过 Version 获取程序集的版本,但其支持依赖于设备制造商,并且无法保证。
若要获取包含应用程序的目录的名称,请参见如何:获取应用程序目录。
高分辨率
在 .NET Compact Framework 2.0 版中,将在 Visual Studio 2005 项目中自动处理 DPI 分辨率。有关高分辨率的更多信息,请参见如何:处理方向和分辨率更改。
输入/输出 (I/O)
由于设备操作系统的差异,I/O 模型存在约束和限制。.NET Compact Framework 不提供文件更改通知。
由于设备 I/O 在 RAM 中发生,因此无法设置或访问文件和目录属性。
安装和 CAB 文件
可以使用 CAB 文件并创建 MSI 应用程序来分发应用程序。
语言
.NET Compact Framework 支持使用 Visual Basic 和 Visual C# 进行开发,但是目前不支持 C++。 Math
并不是所有的 Math 方法在所有的设备平台上都可以得到支持,但为了兼容起见,将这些方法包括在 API 中。
内存
.NET Compact Framework 经过了优化,特别适合于用电池供电的系统,并且避免了高强度地使用 RAM 和 CPU 周期。有关节省内存的更多信息,请参见设备内存管理和如何:提高性能。
网络
.NET Compact Framework 提供了用于建立红外连接的“红外数据协会”(IrDA) 类,以及用于为设备的 HTTP 请求提供服务的 Web 侦听类。这些类仅在 .NET Compact Framework 中可用。有关更多信息,请参见网络和连接。
性能测试
.NET Compact Framework 不支持代码分析或系统监视器中的 Perfmon.exe 文件。但是,您可以使用性能计数器。请参见
性能和诊断了解更多信息。
代理代码
.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 不支持使用 HTTPS 的客户端证书和身份验证。使用基本身份验证。
安全性
.NET Compact Framework 中的安全中介绍了一些重要的安全性差异和注意事项。
序列化
出于大小和性能方面的考虑,.NET Compact Framework 不支持使用 BinaryFormatter 的二进制序列化和使用 SoapFormatter 的 SOAP 序列化。
但是,对于在 XML Web services 中使用 SOAP 传输对象数据提供序列化支持,并且支持将数据集序列化为 XML。 大小
.NET Compact Framework 的大小是 .Net Framework 全功能版可再发行包的 8%。由于 Windows CE 文件系统压缩,因此,在磁盘上的大小要小 50%。
套接字
不是所有的套接字选项都受支持。有关更多信息,请参见套接字编程。
字符串处理,正则表达式
使用 .NET Compact Framework 的正则表达式的应用程序与使用 .NET Framework 全功能版的正则表达式的应用程序的二进制代码不兼容,但它们的源代码兼容。
线程
一个 .NET Compact Framework 应用程序最多可以创建四个线程:
主应用程序线程。
用来控制可由系统或应用程序安排的各种时间段计时器和超时的线程。用来跟踪活动 TCP/IP 接口更改的线程(模拟 Windows XP 中提供而 Windows CE 中未提供的介质检测行为)。
用来运行对象终结器的线程。在对第一个可终结对象进行垃圾回收时创建该线程。
有关线程处理支持的更多信息,请参见 .NET Compact Framework 中的线程处理。
时间间隔
Now 返回的值只精确到秒而不是毫秒。可以使用 TickCount 属性获得更精确的度量值。
计时器
不支持 System.Timers.Timer 的 Start 和 Stop 方法,但是,将 System.Windows.Forms.Timer 的 Enabled 属性设置为 true 或 false,可以启动和停止计时。
Visual Basic My
.NET Compact Framework 支持 Visual Basic 的 My 功能(请参见使用 My 开发),但下列 My 对象除外:
My.Application
My.Computer My.User My.Settings |
Web 服务客户端直接运行 wsdl.exe 生成的程序集。
请不要使用 localhost 在设备上创建 Web 服务,因为 localhost 是指运行应用程序的设备,即该设备本身。应使用计算机名称或其 IP 地址。
XML
出于大小方面的考虑,.NET Compact Framework 不支持 XML 架构验证。它确实支持 XML 文档对象模型 (DOM)。有关更多信息,请参见数据访问和 XML 支持。
濠电姷鏁告慨鐑藉极閸涘﹥鍙忛柣鎴濐潟閳ь剙鍊圭粋鎺斺偓锝庝簽閸旓箑顪冮妶鍡楀潑闁稿鎹囬弻娑㈡偄闁垮浠撮梺绯曟杹閸嬫挸顪冮妶鍡楀潑闁稿鎸剧槐鎾愁吋閸滃啳鍚Δ鐘靛仜閸燁偉鐏掗柣鐘叉穿鐏忔瑧绮i悙鐑樷拺鐟滅増甯掓禍浼存煕閹惧娲撮柟顔藉劤鐓ゆい蹇撴噳閹锋椽姊婚崒姘卞闁告娲熷畷濂稿Ψ閵壯勭叄婵犵數濮撮敃銈団偓姘煎弮瀹曪綀绠涢弮鍌滅槇婵犵數濮撮崐缁樻櫠濞戙垺鐓曢悗锝冨妼婵′粙鏌曢崶褍顏€殿喕绮欐俊姝岊槹闁逞屽墯鐢繝寮婚悢鍏煎癄濠㈣泛锕ュ▓濠氭⒑閸濆嫮鐏遍柛鐘崇墵楠炲啫饪伴崼婵堝幐闂佺ǹ鏈粙鎾广亹鐎n喗鐓熼幖娣€ゅḿ鎰箾閸欏顏堟偩濠靛牏鐭欓悹鎭掑妽濞堥箖姊洪崜鎻掍簼婵炲弶鐗犻幃鈥斥槈閵忥紕鍘遍柣蹇曞仜婢т粙鎯岀€n偆绠鹃柛顐ゅ枑閸婃劖鎱ㄦ繝鍕笡闁瑰嘲鎳愮划鐢碘偓锝庝簼閻d即姊绘担瑙勫仩闁告柨顑夊畷锟犲礃閼碱剚娈鹃梺闈涚箞閸婃洟宕橀埀顒€顪冮妶鍡楀闁稿骸宕惃顒勬⒒閸屾瑧鍔嶉悗绗涘懐鐭欓柟瀵稿Л閸嬫挸顫濋悡搴$睄閻庤娲戦崡鍐茬暦閸楃倣鐔兼⒐閹邦喚娉块梻鍌欑窔濞佳囨偋閸℃稑绠犻幖娣灪閸欏繑銇勯幒鍡椾壕闂佸疇顫夐崹鍧楀春閵夆晛骞㈡俊鐐插⒔閸戣绻濋悽闈浶為柛銊︽そ閺佸鏌ч懡銈呬沪濞e洤锕俊鍫曞川椤斿吋顏¢梻浣呵归鍛村磹閸︻厽宕叉繛鎴欏灩楠炪垺淇婇婵愬殭缁炬澘绉归弻锝嗘償閵忥絽顥濆銈忓閺佽顕g拠宸悑闁割偒鍋呴鍥⒒娴e憡鍟為柟鎼佺畺瀹曠増鎯旈…鎴炴櫔闂佹寧绻傞ˇ浠嬪极閸℃ぜ鈧帒顫濋濠傚闂佹椿鍘介〃鍡欐崲濞戙垹绠婚柡澶嬪灩閸斾即姊虹粙娆惧剱闁圭懓娲濠氭晲閸涱亝顫嶅┑鐐叉閸旀洜澹曢幎鑺モ拺闁告繂瀚﹢鎵磼鐎n偄鐏撮柛鈺冨仱楠炲鏁冮埀顒€顔忓┑鍥ヤ簻闁哄洨鍋為崳娲煃鐠囪鍔熺紒杈ㄦ崌瀹曟帒鈻庨幋婵嗩瀴婵$偑鍊戦崝宀勫箠濮椻偓楠炲棗鐣濋崟顐わ紲闂佺粯鍔欏ḿ褏绮婇敃鍌涚厵闁稿繗鍋愰弳姗€鏌涢弬璺ㄧ劯闁诡喚鍋ゅ畷褰掝敃閻樿京鐩庨梻浣告贡閸庛倝宕归悽鍓叉晜闁冲搫鎳忛崐鍨叏濮楀棗澧绘俊鎻掔秺閺屾洟宕惰椤忣厾鈧鍠曠划娆愪繆濮濆矈妲奸梺闈╃祷閸庡磭妲愰幘瀛樺缂佹稑顑呭▓顓炩攽閳藉棗浜濈紒璇茬墕椤曪絾绻濆顓炰簻缂佺偓濯芥ご鎼佸疾閿濆鍋℃繝濠傚暟鏁堥梺璇″枟閿曘垽骞婇悩娲绘晢闁稿本绮g槐鏌ユ⒑閸濆嫷妲搁柣妤€瀚板畷婵囨償閿濆洣绗夐梺缁樺姉閸庛倝鎮″☉銏″€堕柣鎰硾琚氶梺鍝ュУ閿曘垽寮婚埄鍐╁闁荤喐婢橀~鎺楁倵鐟欏嫭绀堥柛鐘崇墵閵嗕礁顫滈埀顒勫箖閳哄懏鎯炴い鎰╁€濋幏濠氭⒒閸屾艾鈧嘲霉閸パ呮殾闁割煈鍋呴崣蹇涙煙閹澘袚闁抽攱姊婚埀顒€绠嶉崕閬嵥囬鐐插瀭闁稿瞼鍋為悡銏′繆椤栨粌鐨戠紒杈ㄥ哺閺屻劌鈹戦崱鈺傂︾紓浣插亾閻庯綆鍋佹禍婊堟煛瀹ュ啫濡块柍钘夘槹缁绘盯宕奸悢铏圭厜濠殿喖锕ㄥ▍锝呪槈閻㈢ǹ宸濇い鏂惧嫎閳ь剚鍔曢—鍐Χ鎼粹€茬凹濠电偠灏欓崰鏍х暦濞差亜鐒垫い鎺嶉檷娴滄粓鏌熼崫鍕棞濞存粓绠栧娲箰鎼淬垻鈹涙繝纰樷偓铏悙閸楅亶鏌熼悧鍫熺凡缂侇偄绉归弻娑㈩敃閿濆洨鐣煎銈嗘尰濡炶棄顫忛搹鍦<婵☆垰鎼~宀勬倵濞堝灝娅橀柛鎾寸懆閻忓啴姊洪崨濠佺繁闁哥姵宀稿畷銏ゅ箹娴e厜鎷洪梺鍛婃尰瑜板啯绂嶆禒瀣厱閻庯綆浜滈顓㈡煙椤旀枻鑰块柡浣稿暣瀹曟帒鈽夊顒€绠為梻浣筋嚙閸戠晫绱為崱娑樼;闁糕剝蓱濞呯姵銇勯幒鎴濃偓鑽ゅ婵傚憡鐓曢悘鐐插⒔閳藉绱掑锕€娲﹂悡娆撴煟閻斿憡绶叉い蹇e弮閺岀喖鎮℃惔銏g闂佺懓寮堕幐鍐茬暦閻斿吋顥堟繛鎴炵懄閻濓繝姊婚崒姘偓鎼佸磹妞嬪海鐭嗗〒姘e亾妤犵偞鐗犻、鏇㈠Χ閸屾矮澹曞┑顔矫畷顒勫储鐎电硶鍋撶憴鍕缂傚秴锕濠氬幢濡ゅ﹤鎮戦梺鍛婁緱閸ㄧ晫妲愰柆宥嗙厽閹艰揪绱曢悾顓㈡煕鎼淬劋鎲鹃挊婵喢归崗鍏肩稇缁炬崘娉曢埀顒€绠嶉崕閬嵥囨导瀛樺亗闁哄洢鍨洪悡娑㈡煕閵夛絽鍔氬┑锛勫帶椤儻顧侀柛銊ゅ嵆濠€渚€姊虹紒妯撳湱绮旈鈧、鏃堝醇閻旇櫣鏆㈤梻鍌氬€烽悞锔锯偓绗涘懏宕查柛灞绢嚤濞戞鏃堝川椤撶姴骞掗梻浣告惈濞层垽宕瑰ú顏呭亗闁告劦浜濋崰鎰節婵犲倻澧曠紒鈧崼鐔稿弿婵☆垱瀵х涵楣冩煢閸愵亜鏋涢柡灞炬礃缁绘稖顦查悗姘卞厴瀹曟垿濡搁埡鍌楁嫼缂傚倷鐒﹂敋濠殿喖娲﹂妵鍕即閵娿儱绫嶉梺绯曟杺閸ㄨ棄顕i幘顔碱潊闁炽儲鏋奸崑鎾绘偨閸涘﹦鍙嗗┑鐘绘涧濡鍩€椤掑倹鍤€闁宠绉瑰畷鍫曞Ω閿濆嫮鐩庨梻濠庡亜濞诧妇绮欓幇鏉跨疅濡わ絽鍟悡娑㈡倶閻愰潧浜剧紒鈧€n兘鍋撶憴鍕濞存粌鐖奸妴浣割潨閳ь剟骞冮姀锛勯檮濠㈣泛顦辨径锟�