Подписанное приложение Clickonce завершается с ошибкой "имеет вычисленный хэш, отличный от указанного в манифесте". Маг не может решить проблему
Я действительно боролся с этим в течение нескольких дней. Я видел другие сообщения, такие как Ошибка развертывания ClickOnce: вычисленный хэш отличается от указанного в манифесте, но решения, похоже, не работают для меня.
У меня есть действующий сертификат подписи кода, и я использую его для подписи своего приложения ClickOnce в течение нескольких месяцев. Я понял, что не подписываю исполняемый файл и сам dll, поэтому я пытаюсь это сделать. Теперь каждый раз, когда я публикую и запускаю файл setup.exe, он завершается с ошибкой: "Файл, xxxxxx.dll, имеет другой вычисленный хеш, чем указано в манифесте".
Если я не подпишу exe и Dlls, я могу перераспределить. Я убедился, что все копии exe/dll подписаны во всех каталогах (Target, Obj) перед публикацией. Я пытался использовать Mage/MageUI, но безуспешно. Можно ли настроить установку ClickOnce без подписанного кода, а затем опубликовать подписанный код? Кажется логичным, но, возможно, я что-то упустил.
Спасибо Грегг
4 ответа
Есть ли вероятность, что вы пытаетесь развернуть приложение WPF и используете Visual Studio 2012 или более позднюю версию? Если это так, вы должны использовать параметр "AfterCompile" в файле проекта, чтобы подписать приложение, или вы получите несоответствие хеша.
Посмотрите это сообщение от stackru: SignTool не подписывает приложение ClickOnce с использованием SHA256, использует только SHA1
Какая ссылка на отличное блог-решение Робина: http://robindotnet.wordpress.com/2013/04/14/windows-8-and-clickonce-the-definitive-answer-revisited/
Я все еще использую Visual Studio 2015, преобразование конфигурации приложения для конфигурации сборки, TFS и различные ветки выпуска. После долгих исследований я не смог найти решение, чтобы решить эту проблему, пока не начал использовать кнопку мастера публикации.
Если вы используете VS2015, сначала попробуйте выполнить публикацию с помощью кнопки "Мастер публикации..." вместо кнопки "Опубликовать сейчас". Судя по всему, кнопка мастера публикации обновляет файл манифеста после преобразования конфигурации приложения.
Первое, что нужно проверить: Опубликовать - Обновления - Обновления приложений - URL-адрес правильный (например, у вас есть тестовый URL-адрес и URL-адрес развертывания)
Второе, что нужно проверить: удалите ссылку System.Deployment и добавьте ее обратно. У нас возникла проблема после переноса проекта с VS2012 на VS2015, и это действие заставило его снова работать после нескольких часов попыток применить другие идеи.
Кстати, вот простое руководство, как сделать принятый ответ:
щелкните правой кнопкой мыши проект и выберите "Разгрузить проект"
щелкните правой кнопкой мыши проект и выберите "Изменить"
добавьте следующее перед тегом закрытия финального проекта:
<Target Name="AfterCompile" Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<Exec Command=""C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\signtool.exe" sign /f "C:\temp\myPFX.pfx" /p "admin" /v "$(ProjectDir)obj\$(ConfigurationName)\$(TargetFileName)"" />
</Target>
измените местоположение файла signtool.exe и pfx (подпись) на ваше собственное местоположение
сохранить файл проекта
перезагрузить проект
Многие из моих проблем с clickonce и подписыванием кода с использованием Visual Studio 2013, включая эту конкретную проблему, были решены путем установки обновления 4 vs2013.
(возможно обновления 3 было бы достаточно, но я установил обновление 4 после нескольких дней разочарования)
Я использую signtool с параметром /sha1 в событии после сборки каждой сборки. (беги всегда).
Моя проблема решена после того, как я очистил папку отладки своего приложения, а затем также удалил все из папки " Публикация " на сервере (целевой компьютер). Очистка Publish fodler не останавливает работу вашего приложения, установленного на клиентских компьютерах. Так что следуйте инструкции, и это уже сработало для меня после 3 дней поиска. Затем я повторно публикую приложение, и оно начало работать, и они также обновили приложение на стороне клиента.