Вопрос о развертывании VS 2010 One Click "Проверка приложения не удалась. Не удалось продолжить"

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

"Проверка приложения не удалась. Не удалось продолжить"

Когда я нажимаю на более подробную информацию, я получаю следующее.

Были обнаружены следующие сообщения об ошибках:

  • Ссылка в манифесте не совпадает с идентификатором загруженной сборки Designer.exe.

Я пробовал несколько разных исправлений без успеха.

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

Кто-нибудь знает, как я могу исправить эту проблему?

Ответ 1

Невозможно найти какую-либо информацию об этом вообще.

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

Я постараюсь сделать больше, чем просто добавить еще один хит Google и объяснить основную проблему. Никто не объясняет, что на самом деле происходит не так. И, надеюсь, поможет осветить тяжело диагностируемые случаи. Проблема - это очень плохо документированное свойство исполняемого файла, манифест приложения. Помните, что слово "манифест" означает много вещей в Windows, манифест приложения отличается от манифеста ClickOnce.

В манифесте приложения добавляется дополнительная настройка исполняемого файла. Они очень важны с Vista, вам нужно отметить, что ваша программа совместима с UAC. Несколько других применений, вам нужны записи для использования COM без учета реестра, изменить способ поиска Windows для зависимых DLL, отключить прокси-серверы Windows appomppat или сообщить Windows 8.1 о том, чтобы перестать лгать о его номере версии.

Одна из проблем, относящихся к вашей проблеме, заключается в том, что существует два способа предоставить манифест для исполняемого файла. Предпочтительный способ - встроить его в сам исполняемый файл. Встраивается как неуправляемый ресурс. Это делается, когда вы создаете приложение Winforms с настройками по умолчанию. Компилятор С# или VB.NET имеет стандартную конфигурацию. Или конкретный, который вы добавили в свой проект с помощью шаблона элемента манифеста приложения. Встраивание предпочтительнее, поскольку ограничивает количество способов, с помощью которых манифест может быть потерян или обработан. И это то, что Windows будет искать в первую очередь.

Или он может быть представлен как отдельный файл, он должен быть назван yourapp.exe.manifest и сохранен в том же каталоге, что и файл yourapp.exe. Таким образом мастер публикации может это сделать, вы можете найти его в папке публикации, и он будет скопирован на целевую машину вместе с исполняемым файлом.

Возможно, вы можете почувствовать надвигающуюся проблему, два манифеста, и они не совпадают. System.Deployment следует правилам Windows и сначала ищет встроенный манифест. Он найдет значение по умолчанию, которое вставляет компилятор С#. Он проверяет идентификатор сборки против объявленного в манифесте ClickOnce. И если это не соответствует, то kaboom с "ссылкой в ​​манифесте не совпадает с идентификатором загруженной сборки". Он считает, что исполняемый файл был заменен, когда он перемещался с вашего веб-сервера на пользовательскую машину с помощью атаки "человек в середине".

Вы начинаете диагностировать эту проблему, сначала просматривая неуправляемые ресурсы, встроенные в исполняемый файл (Designer.exe), те, которые сначала отображаются в System.Deployment. В Visual Studio используйте File + Open + File и выберите Designer.exe из папки публикации. Вероятно, это будет выглядеть так:

enter image description here

Запись RT_MANIFEST с идентификатором # 1 представляет собой встроенный манифест приложения. Вы можете дважды щелкнуть по нему, чтобы посмотреть, но вы получите шестнадцатеричный дамп содержимого. Легче щелкнуть правой кнопкой мыши, экспортировать и указать имя файла .txt, чтобы вы могли посмотреть на него с помощью текстового редактора. Это будет выглядеть примерно так:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>

Элемент <assemblyIdentity> является создателем проблем. Обратите внимание, как у него есть общее имя, "MyApplication.app" и номер версии по умолчанию 1.0.0.0. Если вы посмотрите файл yourapp.exe.manifest, созданный мастером публикации, вы увидите что-то вроде этого:

  <asmv1:assemblyIdentity name="WindowsFormsApplication86.exe" version="1.0.0.0" 
     publicKeyToken="e939ba736dc34835" language="neutral" 
     processorArchitecture="msil" type="win32" /> 

Даже близко. Kaboom


Несколько способов исправить это:

  • Когда файл File + Open + File все еще открыт, щелкните правой кнопкой мыши идентификатор манифеста № 1 и выберите "Удалить". Это полностью удалит его, System.Deployment теперь найдет файл
  • Project + Properties, вкладка Application, измените параметр Manifest на "Создать приложение без манифеста". Это должно быть ваше предпочтительное решение.
  • Если вам нужен пользовательский манифест и используется файл манифеста приложения, вы должны удалить его снова и вместо этого изменить файл yourapp.exe.manifest, созданный мастером публикации. Это довольно болезненно и лучше всего избегать, так как вам нужно многократно делать это.
  • Обновите свою версию VS, эта проблема исправлена, и теперь она достаточно умна, чтобы перестроить ваш проект, теперь без манифеста по умолчанию, когда вы публикуете. Я думаю, что начиная с VS2012, определенно для VS2013.