我们有一个.Net应用程序,它使用 ClickOnce 进行自动更新。但Click Once的问题在于,无论项目是否发生任何变化,所有程序集都会获得更新。我想仅手动更新 已更改的dll 到之前的ClickOnce已发布文件夹并使用 MageUI.exe 更新清单。我也在考虑增加已更改的程序集版本,以便我们可以通过查看安装了ClickOnce应用程序的用户缓存文件夹来跟踪已更改的程序集。我想知道这是一种可接受的方法吗?感谢。
答案 0 :(得分:5)
我认为这不是必要的。虽然ClickOnce提供的更新对话框没有告诉您,但ClickOnce在满足以下条件时不会下载文件:
相反,它将复制先前版本的文件。
因此,如果您使用强名称并且在未更改时不重建程序集,则ClickOnce应该完全按照您的意愿执行。
请参阅British Standard Time和here以供参考。
here是官方消息来源
更新应用程序时,ClickOnce不会下载新版本应用程序的所有文件,除非文件已更改。相反,它将当前应用程序的应用程序清单中指定的文件的哈希签名与新版本的清单中的签名进行比较。如果文件的签名不同,ClickOnce将下载新版本。如果签名匹配,则文件未从一个版本更改为下一个版本。在这种情况下,ClickOnce会复制现有文件并在新版本的应用程序中使用它。这种方法可以防止ClickOnce再次下载整个应用程序,即使只有一个或两个文件发生了变化。