Silverlight 2应用程序中XAP文件揭秘

概述

XAP文件是Silverlight 2应用程序编译打包后的一个文件,它是一个标准的zip压缩文件,包括了Silverlight 2应用程序所需的一切文件,如程序集、资源文件等。

本文将对Silverlight中的XAP文件进行详细的说明。

XAP文件是什么

XAP文件是Silverlight 2应用程序编译打包后的一个文件,包括了Silverlight 2应用程序所需的一切文件,如程序集、资源文件等。这里的xap并没有任何特殊的意义,仅仅是Silverlight 2应用程序编译后生成文件的扩展名而已,本质上它是一个标准的zip压缩文件。我们可以修改.xap文件后缀为.zip文件,并用解压缩工具打开,可以看到其中包含的文件:

TerryLee_0113

如何使用XAP文件

xap文件的使用想必大家都已经熟知了,在ASP.NET页面中,我们可以使用Silverlight Control来引用xap文件,如下代码所示:

TerryLee_0114

注意Silverlight控件依赖于ScriptManager,因此在ASP.NET页面上必须要有一个ScriptManager控件。在HTML页面(或者PHP、JSP等)中,我们可以使用如下的方式:

TerryLee_0115

这里的type="application/x-silverlight-2-b2" 指定了当前版本为Silverlight 2 Beta 2,后面的超链接指定了当用户的机器上没有安装Silverlight 2插件时的下载地址及显示的图片。

XAP文件如何执行

一旦我们引用了一个xap文件,在应用程序运行时Silverlight插件将会下载该xap文件并在一个独立的子窗口中运行,如下图所示:

TerryLee_0117

XAP文件包含什么

在本文一开始我们就说,XAP文件包含了Silverlight 2应用程序所需的一切文件,如程序集、资源文件等,但它至少会包含两个文件,一个是当前Silverlight应用程序的程序集,另一个是AppManifest.xaml文件。AppManifest.xaml文件相当于是一个清单(类似于库存单一样),如下代码所示:

<Deployment xmlns="http://schemas.microsoft.com/client/2007/deployment" 
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            EntryPointAssembly="XapFileExplain"
            EntryPointType="XapFileExplain.App"
            RuntimeVersion="2.0.30523.6">
  <Deployment.Parts>
    <AssemblyPart x:Name="XapFileExplain" Source="XapFileExplain.dll" />
  </Deployment.Parts>
</Deployment>

它至少包括了如下几个方面的信息:

1.应用程序入口点的程序集

2.应用程序入口点的类型

3.应用程序运行时的版本

4.应用程序相关的所有程序集

XAP文件如何生成

XAP文件在Silverlight项目编译时由开发环境自动生成,一般情况下,不需要我们手工进行控制。这里大家可能会想到一个问题,如果打包在XAP文件中的程序集过多,会造成文件体积变大,有些程序集虽然我们在程序中用到了,但并不是一下载XAP文件就要用到,可能是某一特定的时刻才会用,那这样可不可以只打包一些必须的程序集,而其它的在需要时再下载呢?答案自然是肯定的。

如我们程序中用到了System.Windows.Controls.Extended程序集,但我们又不想它打包在xap文件中,该如何做呢?可以通过设置程序集属性来实现,如下图所示:

TerryLee_0118

我们可以设置程序集的Copy Local属性为False,这样该程序集将不会打包在XAP文件中,等需要时我们可以在手工进行下载,如使用WebClient进行下载等。

总结

本文详细介绍了Silverlight 2中的XAP文件,希望对大家有用。

更多Silverlight 2的文章请参考Silverlight 2 相关文章汇总

作者:TerryLee
出处:http://terrylee.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
Tag标签: Silverlight
posted @ 2008-07-11 22:56 TerryLee 阅读(4461) 评论(38)  编辑 收藏 网摘 所属分类: [03]  银光点亮世界

  回复  引用  查看    
#1楼 2008-07-11 23:00 | RogerTong      
TerryLee勤奋的精神真是我们学习的楷模,PS:不会是传说中的沙发吧!
  回复  引用  查看    
#2楼 [楼主]2008-07-11 23:01 | TerryLee      
@RogerTong
太过奖了,呵呵

// 没错,就是沙发:)
  回复  引用  查看    
#3楼 2008-07-11 23:21 | 木野狐(Neil Chen)      
学习.
  回复  引用  查看    
#4楼 [楼主]2008-07-11 23:37 | TerryLee      
@木野狐(Neil Chen)
:)
  回复  引用    
#5楼 2008-07-11 23:50 | 请教 [未注册用户]
Silverlight

  回复  引用  查看    
#6楼 [楼主]2008-07-11 23:50 | TerryLee      
@请教
这?
  回复  引用    
#7楼 2008-07-11 23:50 | 请教 [未注册用户]
Silverlight能否做企业极的应用?反编译问题如何解决?
  回复  引用  查看    
#8楼 2008-07-12 00:16 | 真见      
你写作速度太强了,态度跟老外一样。注意休息。
  回复  引用  查看    
#9楼 2008-07-12 08:03 | 生鱼片      
楼主的Silverlight真是中文里最好的资料了,有人问我哪有好的Silverlight资料,我都推荐他到这来。
  回复  引用  查看    
#10楼 2008-07-12 10:42 | Mahon      
今天是前排就坐,支持老大
  回复  引用  查看    
#11楼 2008-07-12 10:44 | Mahon      

  回复  引用    
#12楼 2008-07-12 11:47 | notruename [未注册用户]
#1楼 2008-07-11 23:00 RogerTong
#2楼 [楼主] 2008-07-11 23:01 TerryLee

楼主不仅在学习和更新随笔上速度吓人。
  回复  引用  查看    
#13楼 2008-07-12 11:49 | Windie Chai(笑煞天)      
很好很强大。
  回复  引用  查看    
#14楼 [楼主]2008-07-12 12:06 | TerryLee      
@请教
做企业级应用完全没有问题,只不过还需要其它的相关的技术来支撑,毕竟Silverlight只是展现方面的。至于反编译问题,完全可以采取以前在.NET平台下的程序集混淆技术等来处理,但我没做过测试。
  回复  引用  查看    
#15楼 [楼主]2008-07-12 12:06 | TerryLee      
@真见
谢谢:)
  回复  引用  查看    
#16楼 [楼主]2008-07-12 12:06 | TerryLee      
@生鱼片
谢谢支持啊,呵呵
  回复  引用  查看    
#17楼 [楼主]2008-07-12 12:07 | TerryLee      
@Mahon
谢谢支持


  回复  引用  查看    
#18楼 [楼主]2008-07-12 12:08 | TerryLee      
@notruename
呵呵:)
  回复  引用  查看    
#19楼 [楼主]2008-07-12 12:08 | TerryLee      
@Windie Chai(笑煞天)
:)
  回复  引用    
#20楼 2008-07-12 19:35 | wuya2 [未注册用户]
我觉得现在博客园的占楼、沙发、顶之类的风气很不好,
建议把这些关键字屏蔽掉。
我看codoproject那些地方很少有纯粹的“沙发”类回复。
  回复  引用  查看    
#21楼 2008-07-13 11:16 | AlexLiu      
大哥,又开始更新了哈。真是认真,周末还这么努力的说。
  回复  引用  查看    
#22楼 [楼主]2008-07-13 23:51 | TerryLee      
@wuya2
其实也无所谓,不影响文章的质量就好。。。
  回复  引用  查看    
#23楼 [楼主]2008-07-13 23:51 | TerryLee      
@AlexLiu
:)
  回复  引用  查看    
#24楼 2008-07-14 17:14 | Kenny tian      
TerryLee,请教一个问题,我每次建一个Silverlight项目里面有一个Page.xaml,如果我想再建一个Page2.xaml,在里面做些例子,怎么xxxTestPage.aspx里显示。
  回复  引用  查看    
#25楼 [楼主]2008-07-14 17:40 | TerryLee      
@Kenny tian
看来你没看我前面几篇文章,我特地写了一篇文章来解释这个问题,呵呵
http://www.cnblogs.com/Terrylee/archive/2008/07/02/tip-switch-usercontrol-in-silverlight-2-application.html
  回复  引用  查看    
#26楼 2008-07-14 20:41 | Kenny tian      
不好意思,我马上去看。Thank you for your help
  回复  引用    
#27楼 2008-07-14 22:41 | www.engzw.cn [未注册用户]
学习了
  回复  引用    
#28楼 2008-07-14 22:42 | www.engjl.cn [未注册用户]
收藏
  回复  引用  查看    
#29楼 2008-07-16 08:51 | Kenny tian      
还楼主请教一个问题,我每次建项目的时候会有一个选项 "复制到配置指定的文件夹" 这是什么意思? 勾中与不勾中有什么区别?

PS:VS2008+Silverlight 2 Beta 2
  回复  引用    
#30楼 2008-07-17 09:19 | Magic_mm [未注册用户]
楼主的文章我一直看,我从silverlight1.0开始学习的,后来直接到silverlight2.0

现在,我发现silverlight有很严重的问题,反编译太容易了,无法有效的保护自己的代码.我想请TerryLee能不能写一篇silverlight 程序集混淆 的文章.
我试过几个工具,不知道是我不会用,还是其它原因,混淆 后silverlight网站打不开.
  回复  引用    
#31楼 2008-07-18 11:58 | 过路人 [未注册用户]
调用Xap文件的web应用程序中,有一个引用:System.Web.Silverligt,如果把这个引用的属性:“复制本地”,改成false,那么该项目运行会报错,说明一定要将该引用打包到xap文件中。可是为什么将Xap文件解压后,找不到这个引用呢?难道是在Silverlight运行时里面包含了吗,那为什么连资源引用都看不到?不知道有没有表达清楚,我是用Reflector来看的。
  回复  引用    
#32楼 2008-07-18 12:03 | 过路人 [未注册用户]
@过路人
好像是我理解错了,Xap文件中打包的应该是Silverlight中用到的引用,和web应用程序是没关系的,搞错了,不好意思。
  回复  引用  查看    
#33楼 [楼主]2008-07-21 10:31 | TerryLee      
@Kenny tian
:)
  回复  引用  查看    
#34楼 [楼主]2008-07-21 10:31 | TerryLee      
@www.engzw.cn
@www.engjl.cn
:)
  回复  引用  查看    
#35楼 [楼主]2008-07-21 10:31 | TerryLee      
@Magic_mm
这个我没做过尝试,有空可以试一下。
  回复  引用  查看    
#36楼 [楼主]2008-07-21 10:32 | TerryLee      
@过路人
你第二次理解对了,呵呵
  回复  引用    
#37楼 2008-09-05 15:21 | tyoo [未注册用户]
--引用--------------------------------------------------
Magic_mm: 楼主的文章我一直看,我从silverlight1.0开始学习的,后来直接到silverlight2.0

现在,我发现silverlight有很严重的问题,反编译太容易了,无法有效的保护自己的代码.我想请TerryLee能不能写一篇silverlight 程序集混淆 的文章.
我试过几个工具,不知道是我不会用,还是其它原因,混淆 后silverlight网站打不开.
--------------------------------------------------------
很关注这个问题。想听听楼主的见解。
  回复  引用  查看    
#38楼 [楼主]2008-09-10 23:44 | TerryLee      
@tyoo
目前没有什么太好的办法。。。

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-07-27 21:23 编辑过
Google站内搜索



相关文章:


相关搜索:
Silverlight

相关链接: