Silverlight开发与部署全解析
立即解锁
发布时间: 2025-08-26 01:21:38 阅读量: 2 订阅数: 18 


Silverlight开发实战精要
# Silverlight开发与部署全解析
## 1. 混合ASP.NET控件与Silverlight内容
在开发中,很多开发者习惯使用HTML测试页面,但有更高追求的ASP.NET开发者会用Silverlight为现有的ASP.NET页面增添新功能,像Silverlight驱动的广告内容、菜单系统以及嵌入式小程序(如计算器或游戏)。不过,在创建这类页面时,有一些要点需要考虑。
ASP.NET代码在Web服务器上运行,ASP.NET控件通过回发机制将当前页面发送回服务器,比如点击ASP.NET按钮时就会触发回发。但问题是,页面回发时,当前的Silverlight应用会结束,服务器代码运行后,新页面被发送到浏览器,浏览器加载新页面,Silverlight应用重新启动。这不仅会让用户回到起始点,而且由于需要重新初始化Silverlight环境,还会额外耗费时间。
若想避免这种干扰,可以采用ASP.NET AJAX技术,其中UpdatePanel工具很实用。基本操作是将通常会触发回发的控件以及它们所修改的其他控件,包裹在一个或多个UpdatePanel控件中。这样,当用户点击按钮时,会向Web服务器发送异步请求,而非完整回发。浏览器收到回复后,会更新页面的相应部分,而不会干扰Silverlight内容。
## 2. Silverlight编译
### 2.1 编译Silverlight应用
编译Silverlight项目时,Visual Studio使用与完整.NET应用相同的vbc.exe编译器,但引用的是不同的程序集,并传入命令行参数nostdlib,这会阻止VB编译器使用标准库(.NET Framework的核心部分,定义在mscorlib.dll中)。也就是说,Silverlight应用可以像用标准VB编写的普通.NET应用一样编译,只是可使用的类库更有限。Silverlight编译模型有诸多优势,如易于部署,与普通JavaScript相比性能大幅提升。
编译后的Silverlight程序集包含编译后的代码和应用中每个页面的XAML文档,这些文档作为资源嵌入程序集。这确保了事件处理代码不会与所需的用户界面标记分离。需要注意的是,XAML不会被编译(与WPF不同,WPF会将其转换为更优化的BAML格式)。
### 2.2 编译产物
Silverlight项目会被编译成以项目命名的DLL文件。例如,名为SilverlightApplication1的项目,vbc.exe编译器会创建SilverlightApplication1.dll文件。项目程序集会被存放到项目目录的Bin\Debug文件夹中,同时还有其他重要文件:
- **PDB文件**:包含Visual Studio调试所需的信息,以项目程序集命名(如SilverlightApplication1.pdb)。
- **AppManifest.xaml**:列出程序集依赖项。
- **依赖程序集**:若程序集的Copy Local属性设置为True,Bin\Debug文件夹会包含Silverlight项目使用的程序集。Silverlight核心部分的程序集Copy Local设置为False,因为无需与应用一起部署(可通过展开解决方案资源管理器中的References节点,选择程序集,在属性窗口中更改Copy Local设置)。
- **TestPage.html**:用户请求启动Silverlight应用的入口页面。Visual Studio仅为独立Silverlight项目生成此文件,不为ASP.NET托管的Silverlight项目生成。
- **XAP文件**:这是一个Silverlight包,包含部署Silverlight应用所需的一切,如应用清单、项目程序集以及应用使用的其他程序集。若开发的是ASP.NET托管的Silverlight应用,Visual Studio还会将XAP文件复制到测试网站的ClientBin文件夹中。
可以通过Visual Studio项目属性更改程序集名称、默认命名空间(添加新代码文件时使用)和XAP文件名,只需在解决方案资源管理器中双击My Project节点即可。
## 3. Silverlight部署
### 3.1 XAP文件
理解Silverlight编译模型后,部署模型就容易理解了,XAP文件是关键。它将应用的各个单元(应用清单和程序集)打包成一个简洁的容器。
从技术上讲,XAP文件是一个ZIP存档。可以将SilverlightApplication1.xap重命名为SilverlightApplication1.xap.zip来验证,之后就能打开存档查看内部文件。目前,它包含应用清单和应用程序集。若应用使用了附加程序集,如System.Windows.Controls.dll,也会在XAP文件中找到。
### 3.2 XAP文件的优势
- **内容压缩**:内容在到达客户端之前不会解压缩,减少了应用下载时间。若应用包含大型静态资源(如图像或文本块),这一点尤为重要。
- **简化部署**:将Silverlight应用上线时,只需将XAP文件与包含Silverlight内容区域的TestPage.html或类似HTML文件(或ASP.NET网页表单)一起复制到Web服务器,无需担心跟踪程序集和资源。
### 3.3 部署注意事项
不过,部署时存在一个潜在障碍。托管Silverlight应用时,Web服务器必须配置为允许对XAP文件类型的请求。在使用Windows Server 2008、Windows 7或带有Service Pack 1的Windows Vista时,IIS 7默认包含此文件类型。若使用没有Service Pack 1的Windows Vista、早期版本的IIS或其他类型的Web服务器,则需要添加将.xap扩展名映射到MIME类型application/x - silverlight - app的文件类型。IIS相关说明可参考http://learn.iis.net/page.aspx/262/silverlight 。
## 4. Silverlight反编译
了解Silverlight项目的基础架构后,就可以对现有应用进行反编译,以了解其工作原理,步骤如下:
1. 访问入口页面。
2. 查看网页源代码,查找指向XAP文件的<param>元素。
3. 在浏览器地址栏中输入对XAP文件的请求(保持相同域名,将页面名称替换为指向XAP文件的部分路径)。
4. 选择“另存为”将XAP文件保存到本地。
5. 重命名XAP文件,添加.zip扩展名,然后打开并提取项目程序集。该程序集与为普通.NET应用构建的程序集基本相同,包含中间语言(IL)代码。
6. 使用Reflector(www.red - gate.com/products/reflector)等工具打开项目程序集,查看IL和嵌入式资源。使用合适的插件,甚至可以将IL反编译为VB语法。
需要注意的是,许多Silverlight开发者不赞成这种行为,但这是Silverlight编译模型不可避免的副作用。由于IL代码容易被反编译或逆向工程,因此不适合存储机密信息(如加密密钥、专有算法等)。若需要执行使用敏感代码的任务,可以考虑从Silverlight应用调用Web服务。若只是想防止他人阅读代码和模仿风格,可以使用混淆工具提高门槛,Visual
0
0
复制全文
相关推荐









