ClickOnce部署应用程序的Prism体系结构注意事项

本文关键字:体系结构 注意事项 Prism 部署 应用程序 ClickOnce | 更新日期: 2023-09-27 18:19:39

我正在使用Prism和ClickOnce创建一个新的应用程序,但在测试ClickOnce的哈希检查仅限delta的更新时,我注意到我需要进行一些架构更改才能充分利用ClickOnce更新。

需要明确的是,我正在部署到互联网连接较差的机器上,我真的想用最小的带宽发布小而快速的更新。理想情况下,只有经过修改的模块才会通过导线发送。

首先,我注意到客户端应用程序项目的哈希(生成.exe的哈希)总是被更改,并且总是被重新下载。这使我删除了Shell.xaml、ShellViewModel.cs和一些ResourceDictionary,并将它们移到一个新的ShellModule中。这就留下了AggregateModuleCatalog、Bootstrapper、App.xaml和App.cs;每个文件都很小,所以这很好。

其次,我注意到ClickOnce的程序更新可能会进入一个模块,所以我在AutoUpdateModule中有它。

最后,我最后关心的是基础设施项目。每个模块都直接引用Infrastructure,如果Infrastructure被修改,所有模块都会获得新的哈希值。我相信这意味着,即使我在Infrastructure中的枚举中添加一行,整个应用程序也会被重新下载。

这个问题有一个优雅的解决方案吗?如果您使用ClickOnce部署了Prism应用程序,还有哪些其他架构修改有助于或改进您的部署?

ClickOnce部署应用程序的Prism体系结构注意事项

我不熟悉Prism,但是,在ClickOnce中没有办法为标准应用程序应用部分更新。

大约5年前,我在一个Windows应用程序项目中遇到了类似的问题(我想)。具体来说,我的用户经常有不稳定的数据连接(有时连接的蜂窝数据连接很差),我需要确保我的更新尽可能小。

尽管我可以防止在每次更新后重新下载完整的应用程序,但我确实发现有许多第三方dll从未更改。因此,我创建了一个单独的安装程序,将这些模块放置在Windows GAC中,并且在安装必备组件时只安装了一次。这将我的应用程序大小从25MB减少到2MB,这是一个相当大的改进。

我不确定这是否适用于你的情况,但它可能会有所帮助。