Группа загрузки файлов приложений ClickOnce - PullRequest
2 голосов
/ 18 ноября 2010

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

  1. MyProgram.exe (средний размер)
  2. MyProgram.exe.config (маленький размер)
  3. MyMenu.xml (маленький размер)
  4. Shared.dll (средний размер)
  5. ThirdParty1.dll (большой размер X)
  6. ThirdParty2.dll (большой размер X)
  7. ThirdParty3.dll (большой размер X)
  8. OtherThirdParty1.dll (большой размер X)
  9. OtherThirdParty2.dll (X-большой размер)
  10. OtherThirdParty3.dll (X-большой размер)

Я попытался установить группы в разделе Application Files , например:

ThirdParty

  1. ThirdParty1.dll
  2. ThirdParty2.dll
  3. ThirdParty3.dll

OtherThirdParty

  1. OtherThirdParty1.dll
  2. OtherThirdParty2.dll

(Обязательно)

  1. MyProgram.exe
  2. MyProgram.exe.config
  3. MyMenu.xml
  4. Shared.dll

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

Какой смысл создавать разные группы файлов, если они не сохранены в одном месте? Я хотел бы использовать это, чтобы при обновлении моей программы мне не нужно было загружать все, только изменения. Некоторые из этих сторонних библиотек DLL имеют размер 10-15 МБ, и у меня до 1000 клиентов с медленными подключениями, так что это большая пропускная способность и большая загрузка для клиентов.

Как мне это настроить, чтобы, когда что-то изменилось в MyProgram.exe, я мог заставить клиента загружать наименьшее количество файлов (ничего из группы ThirdParty и OtherThirdParty)?

Ответы [ 2 ]

8 голосов
/ 19 ноября 2010

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

ClickOnce интеллектуально загружает файлы на основе их хэшей. Если что-то из файла изменится (дата, размер, содержимое и т. Д.), Его хэш изменится. Когда приложение ClickOnce запускается после публикации новой версии, оно сравнивает все хэши файлов клиента и хэши файлов на сервере и загружает только те изменения, которые были изменены.

Пока ваши сторонние dll не меняются, создаваемый для них хеш всегда будет одинаковым. Поэтому их следует загружать только один раз.

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

4 голосов
/ 02 апреля 2012

Кстати, эта статья объясняет назначение файловых групп ClickOnce:

http://thejoyofcode.com/ClickOnce_File_Groups.aspx

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

...