Подписанное приложение 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="&quot;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\signtool.exe&quot; sign /f &quot;C:\temp\myPFX.pfx&quot; /p &quot;admin&quot; /v &quot;$(ProjectDir)obj\$(ConfigurationName)\$(TargetFileName)&quot;" />
  </Target>

  • измените местоположение файла signtool.exe и pfx (подпись) на ваше собственное местоположение

  • сохранить файл проекта

  • перезагрузить проект

Многие из моих проблем с clickonce и подписыванием кода с использованием Visual Studio 2013, включая эту конкретную проблему, были решены путем установки обновления 4 vs2013.

(возможно обновления 3 было бы достаточно, но я установил обновление 4 после нескольких дней разочарования)

Я использую signtool с параметром /sha1 в событии после сборки каждой сборки. (беги всегда).

Моя проблема решена после того, как я очистил папку отладки своего приложения, а затем также удалил все из папки " Публикация " на сервере (целевой компьютер). Очистка Publish fodler не останавливает работу вашего приложения, установленного на клиентских компьютерах. Так что следуйте инструкции, и это уже сработало для меня после 3 дней поиска. Затем я повторно публикую приложение, и оно начало работать, и они также обновили приложение на стороне клиента.

Другие вопросы по тегам