VS 2010 Проблема развертывания одним щелчком мыши "Проверка приложения не удалась. Невозможно продолжить"

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

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

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

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

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

Я пробовал ряд различных исправлений без успеха.

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

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

4 ответа

Решение

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

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

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

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

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

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

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

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

введите описание изображения здесь

Запись RT_MANIFEST с ID #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 по-прежнему открыто, щелкните правой кнопкой мыши манифест ID #1 и выберите "Удалить". Это удаляет его полностью, System.Deployment теперь найдет файл вместо
  • Project + Properties, вкладка Application, измените параметр Manifest на "Создать приложение без манифеста". Это должно быть вашим предпочтительным решением
  • Если вам требуется пользовательский манифест и используется файл манифеста приложения, вы должны снова удалить его и вместо этого отредактировать файл yourapp.exe.manifest, созданный мастером публикации. Это довольно болезненно и лучше избегать, так как вам нужно многократно делать это
  • Обновите версию VS, эта проблема была исправлена, и теперь она достаточно умна, чтобы перестроить ваш проект, теперь без манифеста по умолчанию, при публикации. Я думаю, начиная с VS2012, определенно для VS2013.

Мое исправление пришло после 3 дней просмотра и пробования нескольких предложений на форуме. У меня ничего не получалось.

Затем я начал тщательно просеивать детали сообщения об ошибке и заметил, что где-то посередине была ссылка на "Invoices.exe", а не "Invoices.dll", как я ожидал. Потом я вспомнил, что недавно добавил в проект новый проект под названием "Счета-фактуры", и хотя с тех пор я успешно его опубликовал, с тех пор я не пытался использовать опубликованное решение.

Просмотр главной страницы ссылок на свойства проекта показал проблему.

Основной проект | Свойства | Рекомендации

Все остальные проекты были показаны как dll, кроме "Счета-фактуры". Я удалил запись "Счета". Перескочил к свойствам проекта "Счета-фактуры" и на странице "Приложение" заметил, что тип вывода приложения - "Приложение Windows Form"

Счета свойства | заявка

В раскрывающемся списке я выбрал " Библиотека классов " вместо

Сохраненные свойства | восстановить счета-фактуры |

Вернулся на главную страницу Ссылки свойств проекта и добавил "Счета-фактуры", на этот раз он отображался как DLL, и я смог опубликовать без ошибок. После этого мое приложение загрузилось без ошибки ["Проверка приложения не удалась. Невозможно продолжить"].

Я столкнулся с этой проблемой в решении VS 2017 с несколькими библиотеками Microsoft Office (Microsoft.Office.Uc, Microsoft.Lync.Models) после добавления пользовательской библиотеки, которую я написал в проект.

Проблема (на которую ссылается @Bones2) заключалась в том, что я добавил ссылку на файл Exe из этой пользовательской библиотеки. Хотя обычно это не создавало каких-либо проблем при добавлении пользовательской библиотеки в мой тестовый проект (фактически прославленный "Hello World"), я начал получать проверку приложения не удалось. Невозможно продолжить. в моей производственной среде. Вероятно, это связано с настройками безопасности вокруг библиотек COM и взаимодействия MS Office ("Сборка не допускает частично доверенных абонентов").

В моем случае решение состояло в том, чтобы удалить ссылку на Exe (которая необходима приложению как утилиту, но вызывается из cmd) и добавить exe как элемент Existing в Visual Studio. Обратите внимание, что после выполнения этого шага вам также нужно будет перейти к свойствам для каждого из вновь добавленных элементов и установить для параметра " Действие компоновки" значение " Содержимое", а для параметра " Копировать в каталог вывода" - " Копировать всегда".

Мне помогло снятие флажка «Только знак задержки» в свойствах проекта.

Обозреватель решений -> Свойства проекта -> Подписание -> Только знак задержки.

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