У нас есть приложение .Net, которое использует ClickOnce для автоматического обновления. Но проблема с Click Once заключается в том, что все сборки получают обновления независимо от каких-либо изменений в проекте или нет. Я думаю, что вручную обновляет толькоизменил dlls в предыдущую опубликованную папку ClickOnce и обновил манифест с помощью MageUI.exe. Я также думаю, что до инкремент изменил сборки, чтобы мы могли отслеживать, какие сборки изменились, просмотрев папку пользователя пользователя, в которой установлено приложение ClickOnce. Я хотел бы знать, подходит ли это подход? Благодарю.Поддержание версии сборки в ClickOnce?
ответ
Я думаю, что это не нужно. В то время как диалог обновления обеспечивается ClickOnce не говорит вам так, ClickOnce не будет загружать файлы, если выполняются следующие условия: хэш
- этот файл является тем же
- временной штамп файла является то же самое.
- Для сборок, может возникнуть необходимость в сильной назвать их
Вместо этого он будет копировать файлы из предыдущей версии.
Так что если вы используете сильные имена и не перестраиваете сборки, когда они не изменились, ClickOnce должен делать именно то, что вы хотите.
Here является официальным источником говоря
При обновлении приложения ClickOnce не загружает все файлы для новой версии приложения, если файлы не изменились. Вместо этого он сравнивает хеш-подписи файлов, указанных в манифесте приложения для текущего приложения, против подписей в манифесте для новой версии. Если подписи файлов отличаются, ClickOnce загружает новую версию. Если сигнатуры совпадают, файл не изменился с одной версии на другую. В этом случае ClickOnce копирует существующий файл и использует его в новой версии приложения. Этот подход не позволяет ClickOnce загружать все приложение снова, даже если изменились только один или два файла.
Да, это правда, но когда решение построено, все манифеста манифеста меняются независимо от того, есть какие-то изменения в коде или нет. –
Да, вы правы. Вы должны были бы поместить проекты в разные решения и вручную обновлять ссылки на сборку в своем «основном» проекте. Я согласен с тем, что это гораздо менее удобно, чем все они в одном решении. Но все же IMO намного лучше, чем пытаться заставить ClickOnce выполнять частичное обновление при изменении хеш-подписей. – wkl
Для нашего приложения нам также необходимо установить флажок «Полноправное приложение» в настройках проекта для частичного обновления DLL, а не просто сильно называть – VMAtm
Звучит как проблема, ожидающая случившегося, если вы спросите меня. Что делать, если один клиент пропускает определенное обновление «в промежутке». Он получит новую версию, но не может содержать некоторые изменения, внесенные в предыдущую версию, которые он не получил. – user1429080
Итак, после клика после установки мы проверили verifiy версию # всех DLL. Итак, если update 1 имеет dll с версией # 1.1.1.1, а update 2 имеет другую dll с версией 1.1.1.2, то обновите 3 щелчка, как только установка должна иметь dll 1 с версией 1.1.1.1 и dll 2 с версией 1.1.1.2 вдоль с изменениями, которые вносятся в обновление 3. Фактически, последний клик после выпуска будет обновлен для добавления инкрементных dll с использованием mage ui, и все клиенты получат такую же версию, поэтому, если клиент находится в более старой версии, он тоже получит обновлено до последнего. –
Но разве это не означает, что каждый выпуск должен иметь все во всех предыдущих выпусках + изменения для текущей версии? Смысл, каждый релиз станет «более толстым», пока в какой-то момент в следующем выпуске не должно быть всего включенного?В любом случае, насколько я могу судить, единственный способ поддержать обновление от * любой старой версии до текущей версии - включить все в каждую версию. Если у вас ограниченный набор пользователей и вы можете контролировать, что они регулярно обновляются, то, возможно, это может быть сделано для работы ... – user1429080