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