Особенности архитектуры Prism для развернутых приложений ClickOnce - PullRequest
3 голосов
/ 06 января 2012

Я создаю новое приложение, используя Prism и ClickOnce, но во время тестирования хеш-проверки ClickOnce на наличие обновлений только для дельты я заметил, что мне потребуется внести некоторые изменения в архитектуру, чтобы в полной мере использовать обновления ClickOnce.

Чтобы быть ясным, я развертываю на компьютерах с плохим интернет-соединением, и я действительно хочу публиковать небольшие, быстрые обновления с минимальной пропускной способностью.В идеале, только модули, которые были изменены, будут отправлены по проводам.

Во-первых, я заметил, что хэш проекта клиентского приложения (тот, который создает .exe) всегда менялся независимо от того, что и всегда-downloaded.Это побудило меня удалить Shell.xaml, ShellViewModel.cs и некоторые ResourceDictionaries и переместить их в новый ShellModule.Это оставляет AggregateModuleCatalog, Bootstrapper, App.xaml и App.cs;каждый файл очень маленький, так что все в порядке.

Во-вторых, я заметил, что программное обновление ClickOnce может идти в модуль, поэтому у меня это в AutoUpdateModule.

Наконец, моя последняя проблемаИнфраструктурный проект.Каждый модуль напрямую ссылается на инфраструктуру, и если инфраструктура изменяется, все модули получают новые значения хеш-функции.Я считаю, что это означает, что даже если я добавлю строку в перечисление внутри инфраструктуры, все приложение будет перезагружено.

Есть ли элегантное решение этой проблемы?А если вы развернули приложения Prism с использованием ClickOnce, какие еще архитектурные изменения помогли или улучшили ваше развертывание?

1 Ответ

1 голос
/ 06 января 2012

Я не знаком с Prism, однако в ClickOnce нет способа применить частичные обновления для стандартных приложений.

У меня была похожая проблема (я думаю) с проектом приложения Windows, над которым я работалоколо 5 лет назад.В частности, мои пользователи часто имели нестабильные соединения для передачи данных (соединяясь иногда с плохими сотовыми соединениями для передачи данных), и я должен был быть уверен, что мои обновления были настолько малы, насколько это возможно.

Несмотря на то, что я мог предотвратить полное приложениеПовторно загруженный после каждого обновления, я обнаружил, что было множество сторонних dll, которые никогда не менялись.Итак, я создал отдельный установщик, который поместил эти модули в GAC Windows, и они были установлены только один раз, когда были установлены необходимые компоненты.Это уменьшило размер моего приложения с 25 МБ до 2 МБ - значительное улучшение.

Я не уверен, относится ли это к вашим обстоятельствам, но это может помочь.

...