Silverlight 程序启动

使用VS2010创建一个Silverlight应用程序,程序的结构默认如下图:

Silverlight工程至少由两部分组成,一个是Silverlight应用程序(即图中的SilverlightApplication1项目),一个是承载Silverlight程序的页面(即图中的SilverlightApplication1.Web项目)。
SilverlightApplication1.Web项目中提供了两个页面,一个是aspx页面,一个是普通的html页面,对于承载Silverlight程序来说,他们没有什么不同,下面以html页面作为目标来解释Silverlight程序的加载过程。

打开html页面的源代码文件,可以看到如下代码:
<div id="silverlightControlHost">
    <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
        <param name="source" value="ClientBin/SilverlightApplication1.xap"/>
        <param name="onError" value="onSilverlightError" />
        <param name="background" value="white" />
        <param name="minRuntimeVersion" value="4.0.50826.0" />
        <param name="autoUpgrade" value="true" />
        <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50826.0" style="text-decoration:none">
            <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="获取 Microsoft Silverlight" style="border-style:none"/>
        </a>
    </object>
    <iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe>
</div>
承载页面检测到object标签后,会根据红字部分指示的路径下载SilverlightApplication1.xap包,该包是由Silverlight应用程序打包而成。xap包由开发环境自动打包生成,包含了Silverlight应用程序使用到的各种程序集还有资源。xap包本质上是一个zip格式的压缩包,我们可以使用标准解压缩软件把它解压。针对我们这个项目,xap包解压缩后包含AppManifest.xaml和SilverlightApplication1.dll两个文件,其中AppManifest.xaml文件非常重要,是每一个Silverlight项目都包含的,而dll文件则根据项目的不同而不同。
AppManifest.xaml文件是一份关于应用程序的基本描述文件,打开我们这个项目的AppManifest.xaml文件,可以看到如下结构:
<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    EntryPointAssembly="SilverlightApplication1"
                    EntryPointType="SilverlightApplication1.App"
                    RuntimeVersion="4.0.50826.0">
     <Deployment.Parts>
         <AssemblyPart x:Name="SilverlightApplication1" Source="SilverlightApplication1.dll" />
     </Deployment.Parts>
</Deployment>
如上,绿色标识的部分是程序集清单,标识改应用程序包含多少个程序集,如果有多个,则此处有多个<AssemblyPart>元素。红色部分是关于程序的入口点的说明,负责告诉Silverlight运行时从哪个程序集加载哪个类型来启动程序,此处的描述就是告诉运行时,在SilverlightApplication1.dll中加载SilverlightApplication1.App类型来启动程序。
让我们回过头来看SilverlightApplication1项目,里面包含App的类型定义:
public partial class App : Application
Application来自于System.Windows命名空间,负责Silverlight应用程序启动的一些工作。每一个Silverlight应用程序都需要有一个继承于Application类的子类来作为入口点,一般VS IDE默认帮我们建立的就是这个App类。如果我们在一个Silverlight项目创建了两个Application的子类会发生什么情况呢?此时需要在项目的属性中,对“启动对象”作一个设置,指定使用哪个子类作为入口点。开发环境在打包xap包时,会根据项目设定,在描述文件中写明是具体哪个子类作为入口点。
posted @ 2011-02-11 13:23  fre2technic  阅读(1067)  评论(0编辑  收藏  举报