Ответ 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 из папки публикации. Вероятно, это будет выглядеть так:
Запись 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.