• RIA造成XAP无修改重打包问题的解决办法


    RIA提供了将Web工程上的域服务自动转到silverLight工程上的客户端的机制,也就是.net代码转为sl代码的过程。

    正常情况下,如果一个工程没有修改,编译时会保持上一个版本,其输出文件的修改时间不会变动。但在开发中,发现开启了RIA链接的SL工程每次都在重新生成输出文件,尽管源Web工程和SL工程都没有任何人为的修改。

    下面,先建一个例子说明问题:

    选择业务模板:

    生成两个工程:

    右键点客户端工程,选择生成:

    首次编译结果:

    什么都不改,再次选择生成,结果:

    就和图片上一样的,第2次编译和第1次没什么不同,又重新打了一次包。
    如果现在还不明白这个问题,可以随便新建一个类库工程或其它,看是否会出现这种情况。
    现在的问题是不论是否更改了代码,都会重新编译,重新打包。这会造成什么问题?
    在程序方面,
    首先如果设置版本自动,每次编译都会修改版本号。且输出文件每次都会变更时间。其实这里主要是指开启了设置RIA链接的SL库工程,会导致依赖于其的所有SL库或应用工程重编,工程大时会浪费很多编译时间。
    重要的影响在用户,每次浏览都会被强制重新下载XAP。
    如果程序使用SL缓存,至少需下载一个XAP包,如果没有使用SL缓存,那么包含整个工程的XAP就要被重新下载。IE浏览器总会检测到XAP等包是新的,造成浏览器层的缓存机制无效。

    直接来看解决这个问题的结果,也就是正常情况应该出现结果:

    现在可以看到,XAP没有重新打包,这是正常的,因为没有代码修改。

    出现问题的原因,可以用一句话来描述,RIA框架每次转换域服务时,不管代码是否修改,都会在SL工程重新生成客户端的代码。

    下面是解决办法,在sl工程和生成前事件,调用一个程序,不让VS重新编译。
    此方法用于开启了RIA链接的SL应用程序工程和SL库工程。

    格式:x:\xxxxxxx\RiaCodeKeep  $(ProjectDir)   前面是执行程序+空格+工程目录宏(如有空格目录需加双引号。因有时把bin放到外面,所以需要指定这个工程目录)

    因为修改生成事件,也算一次修改,所以效果下次的下次编译才可以看以看到。

    每次编译时,会在启动一个最小化的窗口,在任务栏点开,显示一些工作状态,这个窗口会自动关闭,可以不看,点开这是样的。

    窗口内信息其实显示了工作原理,相信只要能遇到这个问题的都能理解,不赘述了。

    最后特意说明,这个插件毕竟不是官方的,并不能百分百的防止无修改重编译。期待RIA的下个补丁会修正这个问题。

  • 相关阅读:
    关于前后端跨域问题的解决
    vue+vuex+router+element ui
    winfrom导入excel文件
    winform 导出excel文件
    winfrom DataGridView 列表操作
    LaTex之CTex初体验一
    图像配准的步骤
    Phase Based Feature Detection and Phase Congruency(相位一致性)
    查找论文中的代码
    KullbackLeibler
  • 原文地址:https://www.cnblogs.com/inet/p/2832451.html
Copyright © 2020-2023  润新知