none
clickonce部署应用程序,如何做到在更新时只下载有过更改的文件? RRS feed

  • 问题

  • 大家好,我有个clickonce部署的问题想请教大家,请有空的兄弟帮帮忙:
    我用clickonce部署的程序在更新时总是会下载所有文件,不能做到MSDN上说的只下载有过改变的文件,也许我的文件是全部改变了,因为我发布程序时看到VS自动build了程序,在MSND上说"如果使用 Visual Studio 编译应用程序,则无论何时重新生成整个项目,均会为所有文件生成新的哈希签名。在这种情况下,虽然只有几个程序集可能发生更改,但所有程序集都将被下载到客户端。"(http://msdn.microsoft.com/zh-cn/library/ms404267.aspx),也许这就是我问题的原因,但是我不知道如何做到不build程序就能发布出新版本的程序,请大家讲讲经验啊!谢谢!!!
    2009年6月9日 5:08

答案

  • ClickOnce有优化机制,即如果某个文件没有改动(实际上是这个文件的hash没有变),那么更新时会拷贝原先版本的文件到新版本程序的目录下,而不是从服务器上重新下载。

    但是这一优化机制只适用于其publish Status标志为Data File的文件,对于标志为Include的文件无论其hash有没有改变,在更新时都从服务器上重新下载。

    另外,无论是否启用了优化机制,就是说无论是全部文件都重新下载,还是一部分文件拷贝自原先版本的程序而另一部分文件从服务器上下载,在“正在更新”的界面上仍然会显示整个ClickOnce发布包的大小。因为微软相关的开发人员认为没有必要在界面上精确显示实际下载的文件大小。
    邹俊才
    2009年6月9日 8:37
    版主
  • 你好,我们现在的项目,最早以前就是用的 Click Once 但由于项目的 dll 很多, 加起来有好几十M,导致更一个 dll 客户端会重新下载所有文件,每次更新会很慢,最终是自己写的升级程序, 通过对比客户端和更新服务器文件日期来实现只对部分文件更新
    知识改变命运,奋斗成就人生!
    2009年6月9日 5:32
    版主
  • Visual Studio不支持。你需要手动调用.Net Framework SDK的工具mage.exe。具体操作可以搜索Windows SDK文档,或者去Windows SDK的论坛提问。
    MSMVP VC++
    2009年6月9日 18:00
    版主

全部回复

  • 你好,我们现在的项目,最早以前就是用的 Click Once 但由于项目的 dll 很多, 加起来有好几十M,导致更一个 dll 客户端会重新下载所有文件,每次更新会很慢,最终是自己写的升级程序, 通过对比客户端和更新服务器文件日期来实现只对部分文件更新
    知识改变命运,奋斗成就人生!
    2009年6月9日 5:32
    版主
  • Moderator,谢谢你的回答!
    通过你的回答我感觉,在你们以前的项目中,用click once更新 dll程序用的是全部下载文件.
    我在网上搜索了很多关于我提的问题类似的帖子,答案似乎都是 click once不能实现 自动更新只改动过的文件.
    再次感谢您的参与和您提供的解决办法!!!

    如果有哪位兄弟对此有新的发现,可以用工具实现该功能,请贴在这里供大家学习经验!!!

    2009年6月9日 6:05
  • ClickOnce有优化机制,即如果某个文件没有改动(实际上是这个文件的hash没有变),那么更新时会拷贝原先版本的文件到新版本程序的目录下,而不是从服务器上重新下载。

    但是这一优化机制只适用于其publish Status标志为Data File的文件,对于标志为Include的文件无论其hash有没有改变,在更新时都从服务器上重新下载。

    另外,无论是否启用了优化机制,就是说无论是全部文件都重新下载,还是一部分文件拷贝自原先版本的程序而另一部分文件从服务器上下载,在“正在更新”的界面上仍然会显示整个ClickOnce发布包的大小。因为微软相关的开发人员认为没有必要在界面上精确显示实际下载的文件大小。
    邹俊才
    2009年6月9日 8:37
    版主
  • Visual Studio不支持。你需要手动调用.Net Framework SDK的工具mage.exe。具体操作可以搜索Windows SDK文档,或者去Windows SDK的论坛提问。
    MSMVP VC++
    2009年6月9日 18:00
    版主
  • 好的,谢谢,去论坛看看有没有同样问题的先,
    我在MSDN上看过mageui.exe,也试着用了,可能是没有理解透,还没达到效果.
    再次感谢!!

    2009年6月10日 2:12