2017-01-23 2 views
7

У нас есть приложение .Net, которое использует ClickOnce для автоматического обновления. Но проблема с Click Once заключается в том, что все сборки получают обновления независимо от каких-либо изменений в проекте или нет. Я думаю, что вручную обновляет толькоизменил dlls в предыдущую опубликованную папку ClickOnce и обновил манифест с помощью MageUI.exe. Я также думаю, что до инкремент изменил сборки, чтобы мы могли отслеживать, какие сборки изменились, просмотрев папку пользователя пользователя, в которой установлено приложение ClickOnce. Я хотел бы знать, подходит ли это подход? Благодарю.Поддержание версии сборки в ClickOnce?

+0

Звучит как проблема, ожидающая случившегося, если вы спросите меня. Что делать, если один клиент пропускает определенное обновление «в промежутке». Он получит новую версию, но не может содержать некоторые изменения, внесенные в предыдущую версию, которые он не получил. – user1429080

+0

Итак, после клика после установки мы проверили 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, и все клиенты получат такую ​​же версию, поэтому, если клиент находится в более старой версии, он тоже получит обновлено до последнего. –

+0

Но разве это не означает, что каждый выпуск должен иметь все во всех предыдущих выпусках + изменения для текущей версии? Смысл, каждый релиз станет «более толстым», пока в какой-то момент в следующем выпуске не должно быть всего включенного?В любом случае, насколько я могу судить, единственный способ поддержать обновление от * любой старой версии до текущей версии - включить все в каждую версию. Если у вас ограниченный набор пользователей и вы можете контролировать, что они регулярно обновляются, то, возможно, это может быть сделано для работы ... – user1429080

ответ

4

Я думаю, что это не нужно. В то время как диалог обновления обеспечивается ClickOnce не говорит вам так, ClickOnce не будет загружать файлы, если выполняются следующие условия: хэш

  • этот файл является тем же
  • временной штамп файла является то же самое.
  • Для сборок, может возникнуть необходимость в сильной назвать их

Вместо этого он будет копировать файлы из предыдущей версии.

Так что если вы используете сильные имена и не перестраиваете сборки, когда они не изменились, ClickOnce должен делать именно то, что вы хотите.

См. here и here для справки.

Here является официальным источником говоря

При обновлении приложения ClickOnce не загружает все файлы для новой версии приложения, если файлы не изменились. Вместо этого он сравнивает хеш-подписи файлов, указанных в манифесте приложения для текущего приложения, против подписей в манифесте для новой версии. Если подписи файлов отличаются, ClickOnce загружает новую версию. Если сигнатуры совпадают, файл не изменился с одной версии на другую. В этом случае ClickOnce копирует существующий файл и использует его в новой версии приложения. Этот подход не позволяет ClickOnce загружать все приложение снова, даже если изменились только один или два файла.

+0

Да, это правда, но когда решение построено, все манифеста манифеста меняются независимо от того, есть какие-то изменения в коде или нет. –

+0

Да, вы правы. Вы должны были бы поместить проекты в разные решения и вручную обновлять ссылки на сборку в своем «основном» проекте. Я согласен с тем, что это гораздо менее удобно, чем все они в одном решении. Но все же IMO намного лучше, чем пытаться заставить ClickOnce выполнять частичное обновление при изменении хеш-подписей. – wkl

+0

Для нашего приложения нам также необходимо установить флажок «Полноправное приложение» в настройках проекта для частичного обновления DLL, а не просто сильно называть – VMAtm