代码改变世界

Silverlight开发小技巧之三:巧用VS生成事件打包XAP

2009-05-10 22:35  Amar-Yao  阅读(2742)  评论(0编辑  收藏  举报

  在中大型Silverlight应用中我们会考虑把产品启动必要的DLL打包进XAP放在网站的ClientBin下。这部分包其实是由浏览器管理的。

我们可能会将不同模块的DLL打包到另一个XAP包并在应用启动时动态下载并装载到AppDomian。

  这样在开发阶段就会有一个问题,我们需要手工把这些其他模块的DLL进行打包。很不方便。

  此时我们可以使用VS的生成事件并配合Chiron.exe这个工具进行自动打包。Chiron.exe是DLR中针对动态语言的XAP打包工具。

如果你安装了Silverlight Dynamic Languages SDK这个工具在C:\Program Files\Microsoft SDKs\Silverlight\v2.0\Tools\Chiron,

如果没有安装,从这里下载http://sdlsdk.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=25120

  下图是我的项目结构,其中红色的项目是要打包到另外的XAP包中的DLL

 

  我将Chiron.exe和它的配置文件Chiron.exe.config一并放在网站项目下

 

  在网站项目的生成事件中写DOS脚本

   

 如果目录\ClientBin\temp不存在创建之  

 if not exist $(ProjectDir)ClientBin\temp md $(ProjectDir)ClientBin\temp 

 分别拷贝三个项目的DLL,及实现写好的AppManifest.xaml 文件到上面的目录
 copy $(SolutionDir)XCenter.Framework.Public.SL\Bin\Debug\XCenter.Framework.Public.SL.dll $(ProjectDir)ClientBin\temp
 copy $(SolutionDir)XCenter.Framework.Public.SL\Bin\Debug\Csla.dll $(ProjectDir)ClientBin\temp
 copy $(SolutionDir)XCenter.QueryEngine.Public.SL\Bin\Debug\XCenter.QueryEngine.Public.SL.dll $(ProjectDir)ClientBin\temp
 copy $(SolutionDir)XCenter.QueryEngine.Client\Bin\Debug\XCenter.QueryEngine.Client.dll $(ProjectDir)ClientBin\temp
 copy $(SolutionDir)XCenter.ClientUI\AppManifest.xaml $(ProjectDir)ClientBin\temp

 用Chiron.exe打包XAP文件
 $(ProjectDir)Chiron.exe /d:$(ProjectDir)ClientBin\temp /x:$(ProjectDir)ClientBin\XCenterBusinessAttach.xap

  清理

 del $(ProjectDir)ClientBin\temp\XCenter.Framework.Public.SL.dll
 del $(ProjectDir)ClientBin\temp\Csla.dll
 del $(ProjectDir)ClientBin\temp\XCenter.QueryEngine.Public.SL.dll
 del $(ProjectDir)ClientBin\temp\XCenter.QueryEngine.Client.dll
 del $(ProjectDir)ClientBin\temp\AppManifest.xaml
 rd $(ProjectDir)ClientBin\temp

 只要编译网站,上面的脚本就会执行,需要注意的是如果以上脚本执行出错那么整个项目都会编译报错

 效果见下图,已经生成了XAP包并清理了痕迹,这个包已经可供代码下载了到客户端本地了。