• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

网助的工作随记

软件设计和编码,欢迎同好者 ^_^
  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

SilverLight 缓存辅助——extmap生成工具emGen

关于收集到的XAP缓存的资料,没有一一列转载,如果您是作者,感到不满,请通知我移除。

Silverlight 2应用程序中XAP文件揭秘    如何减小XAP文件的大小  silverlight 使用應用程式庫快取,以減少 XAP 大小 

Silverlight自定义类库实现应用程序缓存   完美实现Silverlight动态加载(XAP动态加载)   阻止xap文件在浏览器中缓存  

Silverlight:xap包(或本地缓存)下载版本更新的解决思路   如何削减silverlight XAP包的尺寸  Silverlight 动态加载XAP文件

silverlight自定义程序集缓存   快速浏览silverlight3 Beta: 打包下载文件(共享程序集)  分包下载及SEO优化方案

强制客户端更新Silverlight XAP文件方法汇总


 

正文开始,在项目设置里勾选使用官方提供的缓存机制,有些官方的和自定义的程序集并不能分离成独立的zip包,因为没有配置xxx.extmap.xml文件(如果不了解看看前面链接)。

工作时,自写了一个extmap生成器,很简单的代码,下面说使用方法,提供程序下载。

进行命令行模式,格式: emGen <assembly> ,在同一目录下生成该程序集 .extmap.xml文件。

对于SilverLight客户端和类库(不是.net工程)库工程,为了生成程序集的extmap.xml文件,在生成后事件加:xxx\emGen.exe $(TargetFileName),意思是在每次生成后针对输出文件,生成一个对应的xml,这个xml不需要添加到工程。于是引用本库工程的应用工程,生成后看到xap内已经没有这个库工程的dll。当版本没有变化时,生成程序不会重写xml。

极少情况:对于加到工程内目录下的外部dll使,用emGen的方法:可以放在vs外部工具,命令参数选择“项路径”$(ItemPath),选择使用输出窗口。单击工程目录内(非引用集)dll文件项,然后点这个菜单项,xml在同目录下生成 。


在RIA工程时,解决SilverLight工程一,Libs\System.Windows.Controls.Data.DataForm.Toolkit.dll,不能放入xap的外部文件部分的问题,不是外部文件,会导致每次都要下载文件,原因是这个dll没有extmap.xml配置。

解决办法,VS2010生成的业务模板下,Libs目录下的System.Windows.Controls.Data.DataForm.Toolkit.dll,还是4.0的,要改成5.0的。

做法是删除原有的lib目录和引用,重新直接引用指向C盘目录里的C:\Program Files\Microsoft SDKs\Silverlight\v5.0\Toolkit\dec11\Bin,这里有extmap.xml文件。


情况:一个SL Lib库和一个SL APP,后者引用前者。用blend在Lib中编辑时,会自动加入SL系统库到引用。如果编辑后不做什么处理,直接浏览网页,就可能出现异常,原因是之前自动加入的系统库不在ClientBin,也是因为这些系统库没有在SL Lib工程中,于是虽然不需要,但是手动加这些系统库的引用。我遇到这几个Microsoft.Expression.Drawing.dll Microsoft.Expression.Effects.dll Microsoft.Expression.Interactions.dll,可能还会更多,再编译浏览网页正常。但这时发现这一个问题,这些类在部署包中没有分离,因为这些文件的目录下没有*.extmap.xml。解决步骤如下:

上述几个库通过查看引用的属性,发现文件在以下目录:C:\Program Files\Microsoft SDKs\Expression\Blend\Silverlight\v5.0\Libraries ,这个目录有访问限制,右键命令行模式,进入这个库目录,运行emGen.exe Microsoft.Expression.Drawing.dll等,再编译SL APP,查看ClientBin目录,可以看到这几个库都分离出来了。


使用emGen,我用的都是命名程序集,未签名同样可以生成,但分离没试过,应该可以。

posted on 2012-12-24 08:35  网助  阅读(921)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3