Оглавление
- Часть 1. Clickonce приложение. Пример создания в Visual Studio.
- Часть 2. Clickonce приложение. Создание с нуля используя утилиту mage.exe.
- Часть 3. Clickonce приложение. Альтератива Mage.exe. ClickOnceUtil4.exe утилита для создания ClickOnce приложений.
- Часть 4. Clickonce приложение. Что умеет утилита ClickOnceUtil4 и не умеет Mage и её аналоги.
В этой статье я постараюсь описать о имеющихся на текущий момент механизмов предотвращения ошибочных ситуаций при сборке ClickOnce приложения путем уведомления пользователя. Подобные уведомления я не видел в других приложениях. Все проверки со ссылками на страницы, где они описаны, есть в разделе справки.
- Ошибка, которую может допустить не знающий пользователь - это создать приложение, у которого исполняемый файл настроен на использование манифеста по умолчанию: "Embed manifest with default settings". Данная проблема хорошо описана на странице Error deploying ClickOnce application - Reference in the manifest does not match the identity of the downloaded assembly. Её решения это в свойстве проекта исполняемого файла перейти в раздел Application и в ComboBox с названием "Manifest" требуется выбрать "Create application without a manifest".
Почему так происходит? Дело все в том, что в манифест с настройками приложения (Не путать с файлом манифеста ClickOnce), зашивается внутрь исполняемого файла. Манифест представляет из себя XML и содержит, в основном, информацию о запуске для ОС. Такую как например обязательный запуск с правами администратора. Visual Studio дополнительно пишет туда имя сборки <AssemblyIdentity />, которая, по каким то причинам, может отличаться от <AssemblyIdentity />, содержащейся в .manifest файле собранного ClickOnce приложения. Тем самым при запуске мы получим ошибку.
На данный момент у меня идёт прямая проверка на наличие и отсутствие манифеста в файле. Позже можно добавить проверку на соответствие AssemblyIdentity файла .manifest и той, что внутри исполняемого файла. Самый простой способ понять есть ли вшитый в файл манифест, это отрыть исполняемый файл блокнотом, и в конце которого можно обнаружить эту XML с манифестом.
Ниже приведен пример сообщения об ошибке, описанной ранее ситуации, перед началом сборки: