Hello,.NET Compact Framework 2.0
伴随着硬盘的惨叫声,我开始写这篇Blog。这也不能怪我的老机,因为他刚经历了一系列的折磨,连续两天连夜下载Visual Studio 2005 Beta2的二月份CTP版本,3.3G呀:)同时还要在VPC里装Windows Server 2003和Windows XP。
言归正传,我为什么如此“虐待”自己的机器呢,因为微软的VS.NET 2005马上就要来了,而这其中就包括了许多我期待已久的好东西。其中两样不得不提:.NET Compact Framework 2.0和SQL Server 2005 Moible Edition。虽然.NET CF 1.0最近获得了Jolt大奖,但是我们也不能否认,他并不是一个成熟的Framework,为了节省空间,而将许多有用、无用的功能都排除在外。甚至许多被Windows CE支持的功能,都没有出现在.NET CF 1.0中。这也激发了.NET CF社区的巨大热情,产生了OpenNETCF这样优秀的开源类库。
微软似乎也意识到了这个问题,于是承诺在.NET CF 2.0中加入许多对于开发人员非常有用的类和功能。我也希望能够在第一时间为大家介绍这些新功能。我希望把这个Blog写成一个系列,用一些实际的例子来阐述.NET CF 2.0的新特性。我随后的例子都是在Windows Server 2003下面用Visual Studio.NET 2005 Beta 2 Feb CTP写的,如果与未来的正式版本有不一样的地方,请大家注意区别一下。
好了,进入正式的话题,我们先按图索骥,看一下.NET CF 2.0的文档中承诺给我们带来哪些新特性,然后再逐个享受新的乐趣,或者戳穿新的谎言:)文档中介绍.NET CF 2.0在JIT编译、碎片收集、XML
Web Service和数据访问方面都有了新特性和性能改善。
应用程序域(Application Domains)支持卸载一个应用程序域。
加密方面,终于支持托管加密方法和X509数字签名了。
DataSet中GetChanges方法被支持了,另外还新加入了一些类,我们将在SQL Mobile
2005里为大家介绍。
异常方面,改进了ComboBox、ListBox和TreeView中SelectIndexChanged、ValueChanged事件中的异常。
Assemblies方面,C#的友元程序集(Friend Assemblies)被CF 2.0支持了。
网络方面,支持NTLM证明和Ipv6网络协议。
现在MSMQ终于被支持了,这是微软环境下最稳定的异步消息传输机制,可以支持不同设备间消息的交互。希望能够在这里写一个例子。
字符串操作方面,Substring方法如果开始位置比字符串长度还大的话,会抛出一个ArgumentException的异常。如string.Empty.Substring(0,1);
线程终于支持BeginInvoke和EndInvoke方法了,并且可以在Invoke时使用参数了。
XML支持XmlSerializer、Xpath和Schema了,虽然是简单的一个说明,可是里边包含了多少程序员的辛酸泪呀。在.NET CF 1.0里遇到超过1M的XML文件就基本没有办法了。CF 2.0的Xpath终于可以让
“翻身程序员把歌唱”了。
另外还有一些新特性,比如支持单独编译和调试,也就是说以后开发.NET CF程序不一定要依托VS.NET的环境了。还有一个好处就是,可以建立一个自动化编译环境,进行Daliy Build了。通过配置文件可以设置该程序集运行在CF 1.0还是CF 2.0的环境下。不过据说配置文件的名字是“xxx.exe.config”,如果这么名字已经被开发者的配置文件用了,还真不好办。
新窗体和新控件方面,据我所知,包括日历控件、DatePicker(不禁要骂,CF 1.0连他都不支持!)、托管环境下的RichInk控件。肯定还会有其他的一些新控件,还是让我们安静等待吧。
最重要的往往最后登场,大家觉得在CF 1.0里最该有却没有的功能是什么?对,就是COM互操作!就这一点,难道了多少英雄汉?我想访问Pocket Access、我想调用Media Player控件、我怎么才能访问Poom?当然也有真的好汉越过了这个障碍,比如用ATL调用COM,然后再通过P/Invoke来调用Native dll来实现访问COM。不过这也太……
现在CF 2.0终于支持.NET CF访问COM组件了,不过COM访问.NET在这个版本里没有实现。大家可以通过Idispatch接口进行晚绑定,或者进行早绑定。看来又要去恶补COM知识了。
好了,我的硬盘终于不响了。我也准备试一下写一个Hello,wolf了。这次我没有谈论SQL Mobile 2005的新特性,其实这也是个有趣的话题,以后再说:)