我们有一个使用ClickOnce自动更新的 .Net 应用程序。但是 Click Once 的问题是,无论项目中是否发生任何更改,所有程序集都会得到更新。我正在考虑将仅更改的 dll手动更新到以前的 ClickOnce 发布的文件夹中,并使用MageUI.exe更新清单。我还在考虑增加更改的程序集版本,以便我们可以通过查看安装 ClickOnce 应用程序的用户缓存文件夹来跟踪哪些程序集发生了更改。我想知道这是一种可以接受的方法吗?谢谢。
1 回答
5
我认为这是没有必要的。虽然 ClickOnce 提供的更新对话框没有告诉您,但当满足以下条件时,ClickOnce 将不会下载文件:
- 文件的哈希值相同
- 文件的时间戳是相同的。
- 对于程序集,可能需要对其进行强命名
相反,它将从以前的版本中复制文件。
因此,如果您使用强名称并且在程序集未更改时不重新构建程序集,ClickOnce 应该完全按照您的意愿进行操作。
这是官方消息来源说
更新应用程序时,除非文件已更改,否则 ClickOnce 不会下载新版本应用程序的所有文件。相反,它会将当前应用程序的应用程序清单中指定的文件的哈希签名与新版本清单中的签名进行比较。如果文件的签名不同,ClickOnce 会下载新版本。如果签名匹配,则文件没有从一个版本更改为下一个版本。在这种情况下,ClickOnce 会复制现有文件并在新版本的应用程序中使用它。这种方法可以防止 ClickOnce 必须再次下载整个应用程序,即使只有一个或两个文件发生了更改。
于 2017-01-27T11:20:33.573 回答