从各方面来讲,微软的下一代视窗即代号为“Longhorn”的操作系统,都是Windows产品中一个非常重要的里程碑。“Longhorn”是首个用托管代码构建的操作系统,采用了微软最新的存储子系统“WinFS”,支持一种更为高级的自然搜索技术(Natural UI)以及最新的安全架构“Palladium”, 在Windows的历史上,我记得也就只有两个这样重要的里程碑,一个是Windows由16位向32位的迁移,另一个是.Net的诞生。当然,“Longhorn”这些令人兴奋的新特性同时也表明我们以往驾轻就熟的开发方式将发生重大的变化。其中最为重要的一个改变是 “Longhorn”使得应用程序可以一次编码,多场景部署。为实现该功能,基于“Longhorn”的应用是完全面向对象的,整个应用派生于一个核心对象Application,该对象提供了运行整个应用程序所需的所有核心功能。本文将带领大家体验最新的Longhorn应用模型,并演示一些基本的例子,其中当然包括经典的“Hello World!”。
一、Longhorn应用模型Application对象是Longhorn应用模型的核心,通过它的属性、方法和事件,你可以像编写网页一样使用一种增强的html来编写传统的Windows窗体应用程序。Application是一个Longhorn应用程序的根对象。它提供了应用程序的基本功能,可用于一些低级的、不需要在窗体间导航和维护状态的程序 ,但更复杂的Longhorn应用程序要使用NavigationApplication对象,这是一个Application的子类 ,增加了对导航的支持。
一个典型的Longhorn应用程序可以被看作一系列带有程序脚本的页面(叫做Page),并由Application对象控制程序的执行。Page使用一种新的标记语言来编写,这种标记语言的代号是“XAML ”(Extensible Application Markup Language)。通过XAML的元素标签你可以控制Page的布局,包括显示文本和图片,插入按钮、文本筐等交互式控件。一言概之,“XAML”是用来编写Longhorn应用程序UI界面Page的标记语言。当然,除了使用XAML,你也可以完全使用程序代码来编写应用程序。一般来说Longhorn程序会同时使用XAML和托管代码。你可以按自己的方式来组合它们。
使用XAML和C#(或VB.NET),你可以构建各种类型的应用输出文件,传统的exe执行文件,DLL 库,或者Console应用程序。而且,如果你的应用程序足够简单的话,你也可以完全使用独立的XAML标签来编写它,这样在longhorn中就多了一种类型的程序。当独立的XAML文件没有引用别的后台类时,它可以直接在Longhorn Shell和浏览器中运行。其实Longhorn的可执行文件都是既可以运行在Windows中,也可以运行在浏览器中的,你无需对程序的代码做任何的修改,只要在编译的时候设置不同的项目属性就行了。
对于Longhorn,可执行程序是今天Windows窗体程序的下一个版本。但从另一方面来说,XAML以及基于浏览器的应用程序也代表了应用程序做为web客户端的开发模式的一次革新。目前,Windows窗体客户端程序很少被发布到web上,因为如果你想把Windows窗体嵌入到浏览器网页中,你会受到诸多限制,还必须对代码做相应的修改。而在Longhorn中,通用的应用模型使你可以编写一个程序并通过web来部署。不过,这与我们传统的web应用(比如Asp.Net)有很大的区别,这是Longhorn专有的应用程序。
当你编译一个应用时,代号为“Whidbey”的下一个版本的Visual Studio和.Net Framework(或者说它底层的MSBuild.exe工具),会生成一个.exe文件,一个程序文件清单(扩展名是.manifest)和一个部署文件清单(扩展名是.deploy).当你点击.exe文件,程序会如你所期望的那样运行于Windows中。但是如果把程序设置为在浏览器中运行,那点击.exe文件时ie会自动跳出来并在其中运行程序。还有一种可选的方式是把程序部署在远端服务器上,步骤如下,首先把.deploy文件拷贝到服务器的合适位置,可以是FTP或HTTP的相对路径下。然后把编译后的程序文件和.manifest拷到服务器上,程序文件、.manifest文件不一定要和.deploy文件放在一起。如果放在不同的地方,你可以编辑.deploy文件,使它指向.manifest文件。.manifest文件和.deploy文件都是xml文件。当用户通过浏览器访问部署文件,Longhorn会自动下载程序文件及.manifest文件并安装到用户电脑上,同时还创建一个指向.deploy文件的快捷方式。用户点击.deploy文件就可以执行程序。
所有Longhorn的应用程序的通用结构都是这样的:XAML Page加上程序代码(内嵌或者使用Code Behind技术),根对象派生于Application。Application对象是程序的控制器,它的生命周期和程序的生命周期是一样的。通过Application对象,你可以处理高级事件、在Page间共享代码和状态等等。它同时也负责根据程序的逻辑让用户在Page间导航,用户在使用软件完成功能时会在Page间来回跳转,跳转时Longhorn一般会使用新的Page代替旧的,当然,你也可以选择弹出一个新的窗口来显示新Page。导航并不是每个程序必需的,简单的只有一个Page的程序就不需要了。
刚刚提到XAML Page可以嵌入程序代码作为标签的补充。程序代码是必需的,比如处理一个由XAML元素产生的事件。程序代码既可以嵌到XAML文件中,也可以放在代码文件中。
Longhorn的编程是基于托管代码的,不过目前只有几种兼容.Net的语言可以用于编写基于XAML的程序,包括C#、VB.NET和JScript.NET,到Longhorn发布时,其他兼容.NET的语
Longhorn应用开发部署初探