Я создаю новое приложение, используя Prism и ClickOnce, но во время тестирования хеш-проверки ClickOnce на наличие обновлений только для дельты я заметил, что мне потребуется внести некоторые изменения в архитектуру, чтобы в полной мере использовать обновления ClickOnce.
Чтобы быть ясным, я развертываю на компьютерах с плохим интернет-соединением, и я действительно хочу публиковать небольшие, быстрые обновления с минимальной пропускной способностью.В идеале, только модули, которые были изменены, будут отправлены по проводам.
Во-первых, я заметил, что хэш проекта клиентского приложения (тот, который создает .exe) всегда менялся независимо от того, что и всегда-downloaded.Это побудило меня удалить Shell.xaml, ShellViewModel.cs и некоторые ResourceDictionaries и переместить их в новый ShellModule.Это оставляет AggregateModuleCatalog, Bootstrapper, App.xaml и App.cs;каждый файл очень маленький, так что все в порядке.
Во-вторых, я заметил, что программное обновление ClickOnce может идти в модуль, поэтому у меня это в AutoUpdateModule.
Наконец, моя последняя проблемаИнфраструктурный проект.Каждый модуль напрямую ссылается на инфраструктуру, и если инфраструктура изменяется, все модули получают новые значения хеш-функции.Я считаю, что это означает, что даже если я добавлю строку в перечисление внутри инфраструктуры, все приложение будет перезагружено.
Есть ли элегантное решение этой проблемы?А если вы развернули приложения Prism с использованием ClickOnce, какие еще архитектурные изменения помогли или улучшили ваше развертывание?