Записанное приложение Clickonce не работает: "имеет другой вычисленный хэш, чем указано в манифесте". Маг не может решить проблему

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

У меня есть действительный сертификат подписи кода, и я использовал его для подписывания своего приложения ClickOnce в течение нескольких месяцев. Я понял, что я не подписываю исполняемый файл и dlls, поэтому я пытаюсь это сделать. Теперь каждый раз, когда я публикую и запускаю файл setup.exe, он терпит неудачу: "Файл, xxxxxx.dll, имеет другой вычисленный хэш, чем указано в манифесте".

Если я не подписываю exe и Dll, я могу перераспределить. Я убедился, что перед публикацией все копии exe/dll подписываются во всех каталогах (Target, Obj). Я пробовал использовать Mage/MageUI, но не имел успеха. Можно ли настроить установку ClickOnce без подписанного кода, а затем опубликовать подписанный код? Кажется логичным, но, возможно, мне что-то не хватает.

Спасибо, Gregg

Ответ 1

Есть ли вероятность, что вы пытаетесь развернуть приложение WPF и использовать Visual Studio 2012 или более позднюю версию? Если это так, вы должны использовать параметр "AfterCompile" в файле проекта, чтобы подписать приложение, или вы получите несоответствие хеша.

Смотрите этот пост stackoverflow: SignTool не подписывает приложение ClickOnce, используя SHA256, использует только SHA1

Какие ссылки на Robin отличное решение для блога: http://robindotnet.wordpress.com/2013/04/14/windows-8-and-clickonce-the-definitive-answer-revisited/

Ответ 2

Удалите ссылку System.Deployment и добавьте ее обратно. У нас возникла проблема после перемещения проекта с VS2012 на VS2015, и это действие снова заработало после нескольких часов попыток разных идей.

btw - вот простое руководство по выполнению принятого ответа:

  • щелкните правой кнопкой мыши проект и выберите "Выгрузить проект"

  • щелкните правой кнопкой мыши проект и выберите "Изменить"

  • добавьте следующее перед тегом завершения заключительного проекта:

  <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>

Ответ 3

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

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

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