ClickOnce部署应用程序的Prism架构考虑

3
我正在使用Prism和ClickOnce创建一个新的应用程序,但在测试仅增量更新的ClickOnce哈希检查时,我注意到我需要进行一些架构更改才能充分利用ClickOnce更新。
明确一点,我要部署到网络连接差的机器上,并且我真的想发布小型、快速更新,带宽最小化。理想情况下,只有修改过的模块会通过网络发送。
首先,我注意到客户端应用程序项目的哈希值(制作.exe文件的那个)无论如何都会改变,并且总是重新下载。这促使我删除了Shell.xaml、ShellViewModel.cs和一些ResourceDictionaries,并将它们移动到一个新的ShellModule中。这样做留下了AggregateModuleCatalog、Bootstrapper、App.xaml和App.cs;每个文件都很小,所以这很好。
其次,我发现ClickOnce的编程更新可以进入一个模块,所以我把它放在了一个AutoUpdateModule中。
最后,我的最后一个问题是Infrastructure项目。每个模块直接引用Infrastructure,如果Infrastructure被修改,所有模块都会获得新的哈希值。我相信这意味着即使我在Infrastructure内部的枚举中添加一行代码,整个应用程序也会被重新下载。
这个问题有优雅的解决方案吗?如果您使用ClickOnce部署Prism应用程序,有哪些其他架构修改可以帮助或改善您的部署?
1个回答

1

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

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接