Silverlight应用部署与相关技术详解
立即解锁
发布时间: 2025-08-26 01:42:04 阅读量: 15 订阅数: 46 AIGC 

### Silverlight应用部署与相关技术详解
#### 1. Silverlight应用部署
理解Silverlight编译模型后,部署模型就容易掌握了。XAP文件是关键,它将应用的单元(应用清单和程序集)打包成一个整洁的容器。从技术上讲,XAP文件是一个ZIP存档。你可以将XAP文件(如SilverlightApplication1.xap)重命名为SilverlightApplication1.xap.zip来验证,之后就能打开存档查看内部文件。
XAP文件系统有两个明显的好处:
- **内容压缩**:内容在到达客户端之前不会解压缩,减少了应用下载时间,对于包含大型静态资源(如图像或文本块)的应用尤为重要。
- **简化部署**:将Silverlight应用上线时,只需将XAP文件与包含Silverlight内容区域的测试页面或类似HTML文件(或ASP.NET网页)复制到Web服务器,无需跟踪程序集和资源。
部署简单的Silverlight应用时,借助XAP模型,无需过多思考。托管Silverlight应用只需提供合适的XAP文件,让客户端通过浏览器下载并在本地运行。
#### 2. Silverlight反编译
了解Silverlight项目的基础架构后,就可以对现有应用进行反编译以了解其工作原理,步骤如下:
1. 访问HTML测试页面。
2. 查看网页源代码,查找指向XAP文件的`<param>`元素。
3. 在浏览器地址栏输入XAP文件请求(保持相同域名,用指向XAP文件的部分路径替换页面名称)。
4. 选择“另存为”将XAP文件保存到本地。
5. 重命名XAP文件添加`.zip`扩展名,然后打开并提取项目程序集。该程序集与普通.NET应用程序的程序集基本相同,包含中间语言(IL)代码。
6. 使用Reflector(www.red - gate.com/products/reflector)等工具打开项目程序集,查看IL和嵌入式资源。使用合适的插件,甚至可以将IL反编译为C#语法。
当然,很多Silverlight开发者不赞成这种行为,但这是Silverlight编译模型不可避免的副作用。由于IL代码容易被反编译或逆向工程,不适合存储机密信息(如加密密钥、专有算法等)。如果需要执行使用敏感代码的任务,可以考虑从Silverlight应用调用Web服务。若想防止他人读取代码和模仿风格,可以使用混淆工具提高门槛,Visual Studio附带了一个简化版的混淆工具Dotfuscator,市场上也有很多商业工具可供选择。
#### 3. Silverlight核心程序集
Silverlight包含完整.NET Framework的部分类。虽然无法将整个.NET Framework塞进Silverlight(毕竟它是一个5MB的下载包,需要支持多种浏览器和操作系统),但它包含了相当多的功能。
每个Silverlight项目都从引用以下程序集开始,这些程序集都是Silverlight运行时的一部分,无需随应用部署:
| 程序集名称 | 描述 |
| --- | --- |
| mscorlib.dll | 相当于.NET Framework中包含最基本部分的mscorlib.dll程序集,包含核心数据类型、异常、接口、集合、文件管理类等,支持全球化、反射、资源、调试和多线程。 |
| System.dll | 包含额外的泛型集合、处理URI的类和处理正则表达式的类。 |
| System.Core.dll | 支持LINQ,名称与完整.NET Framework中的程序集匹配。 |
| System.Net.dll | 包含支持网络的类,可用于下载网页和创建基于套接字的连接。 |
| System.Windows.dll | 包含许多用于构建Silverlight用户界面的类,包括基本元素、形状和画笔、支持动画和数据绑定的类,以及与隔离存储配合使用的OpenFileDialog版本。 |
| System.Windows.Browser.dll | 包含与HTML元素交互的类。 |
| System.Xml.dll | 包含XML处理所需的最少类:XmlReader和XmlWriter。 |
需要注意的是,Silverlight程序集中的一些成员仅可供.NET Framework代码使用,不能从你的代码中调用,这些成员标记有SecurityCritical属性,但该属性不会在对象浏览器中显示,只有尝试使用时才能确定特定功能是否可用(若尝试使用带有SecurityCritical属性的成员,会抛出SecurityException)。例如,Silverlight应用只能通过隔离存储API或OpenFileDialog类访问文件系统,因此FileStream类的构造函数带有SecurityCritical属性。
#### 4. Silverlight附加程序集
Silverlight的架构师致力于使核心框架尽可能小,这样初始Silverlight插件下载小、安装快,对全球网民有明显吸引力。为实现这一目标,他们将一些功能从核心Silverlight运行时移除,放入单独的附加程序集中。这些程序集仍被视为Silverlight平台的一部分,但使用时需要将其与应用打包,这会增加应用的下载大小(不过Silverlight的内置压缩可缓解这一影响)。
常见的附加程序集如下:
- **System.Windows.Controls.dll**:包含许多有价值但更专业的控件,如TreeView、TabControl、两个日期控件(DatePicker和Calendar)和GridSplitter。
- **System.Windows.Controls.Data.dll**:有Silverlight从头构建的DataGrid,是显示密集数据网格的理想工具,还有DataPager,可将结果拆分为可单独查看的组(称为页面)。
- **System.Windows.Controls.Data.Input.dll**:包含一些在构建数据绑定表单时有用的控件,如Label、DescriptionViewer和ValidationSummary。
- **System.Windows.Controls.Input.dll**:包含AutoCompleteBox,用户输入时会下拉显示建议列表。
- **System.Windows.Controls.Navigation.dll**:包含Frame和Page控件,是Silverlight导航系统的基础。
所有这些程序集都会为Silverlight工具包添加新控件。Microsoft还通过Silverlight工具包提供了更多附加控件,可从www.codeplex.com/Silverlight下载。当你将附加程序集中的控件添加到Silverlight页面时,Visual Studio会自动添加所需的程序集引用。选择该引用并查看“属性”窗口,会发现“复制本地”属性设置为True,这与构成核心Silverlight运行时的其他程序集不同。因此,编译应用时,程序集会嵌入最终包中。即使手动添加非核心Silverlight运行时的程序集,Visual Studio也会自动将“复制本地”设置为True。
#### 5. 程序集缓存
程序集缓存是一种部署技术,可将依赖程序集从XAP文件中分离出来。将依赖程序集与XAP文件一起部署,放在同一文件夹的单独ZIP文件中。目的是让客户端缓存常用程序集,以减少应用启动时间。
默认情况下,在Visual Studio中创建的Silverlight应用未配置使用程序集缓存。要启用此功能,可按以下步骤操作:
1. 双击解决方案资源管理器中的“属性”节点。
2. 在项目属性窗口中,开启“使用应用程序库缓存减少XAP大小”设置。
3. 重新编译应用,点击解决方案资源管理器顶部的“显示所有文件”按钮,展开Bin\Debug文件夹,会看到每个可缓存程序集的ZIP文件。例如,若应用使用System.Windows.Controls.dll,会在XAP文件旁边看到名为System.Windows.Controls.zip的文件,该文件包含System.Windows.Controls.dll程序集的压缩副本。启用程序集缓存前包含该程序集的XAP文件,现在不再包含它
0
0
复制全文
相关推荐










