Не удалось добавить сборку в кэш ожидалось что модуль содержит манифест сборки
Сведения об исключении: System.BadImageFormatException: Не удалось загрузить файл или файл сборки:///D:\Projects\Development\ProGamers\GamingSite\bin\avcodec-52.dll или одна из его зависимостей. Ожидается, что модуль будет содержать манифест сборки.
Вещи, которые я пробовал:
Обработка DLL, но она по-прежнему не работает (файл существует).
Зарегистрировать его в GAC, но у меня там такая же ошибка.
Глобальный кэш сборок
Установка сборки в глобальном кэше сборки только при необходимости совместной сборки. Если для общего доступа к сборке явно не требуется, рекомендуется сохранять закрытые зависимости от сборки и находить сборку в каталоге приложений. Кроме того, вам не нужно устанавливать сборку в глобальном кэше сборки, чтобы сделать сборку доступной для microsoft Component Object Model (COM) или для неуправимого кода.
ОТВЕТЫ
Ответ 1
Проверьте, ссылаетесь ли вы на сборку, которая, в свою очередь, ссылается на старую версию единства. Например, скажем, у вас есть сборка под названием ServiceLocator.dll , для которой требуется старая версия сборки Unity, теперь, когда вы ссылаетесь на ServiceLocator , вы должны предоставить ей старую версию Unity, и это создает проблему.
Может быть выходной папкой, где все проекты строят свои сборки, имеет старую версию единства.
Вы можете использовать FusLogVw, чтобы узнать, кто загружает старые сборки, просто определите путь для журнала и запустите решение, затем проверьте (в FusLogvw) первую строку, где загружена сборка Unity, дважды щелкните ее и посмотрите на вызывающую сборку, и здесь вы идете.
Ответ 2
Открыть диспетчер IIS
Выберите пулы приложений
затем выберите пул, который вы используете
перейти к расширенным настройкам (с правой стороны)
Измените флаг Включить 32-битное приложение false на true.
Ответ 3
Для меня ни один из других решений не работал (включая стратегию clean/rebuild). Я нашел другое решение для решения проблемы, которое заключается в закрытии и повторной открытии Visual Studio.
Я предполагаю, что это заставляет Visual Studio повторно загружать решение и все проекты, перепроверяя зависимости в процессе.
Ответ 4
Попробуйте очистить папки Debug и Release в вашем решении. Затем удалите и снова добавьте единство.
Ответ 5
При 99% не удалось загрузить файл или сборку, или одна из проблем с зависимостями вызвана зависимостями! Я предлагаю вам выполнить следующие шаги:
Запустите Dependency Walker и откройте dll (в моем случае NativeInterfaces.dll )
Вы можете увидеть один или несколько DLL с ошибкой в красном Ошибка открытия файла.
Это означает, что эта DLL отсутствует в вашей системе; в моем случае имя dll MSVCR71.DLL
Вы можете скачать отсутствующие dll из Google и скопировать по правильному пути (в моем случае c:\windows\system32 )
На этом этапе вы должны зарегистрировать новый dll в GAC (Global Assembly Cache): откройте терминал DOS и напишите:
Перезапустите ваше приложение!
Ответ 6
После меня работали.
Ответ 7
Проверьте файл Web.config/App.config в своем проекте. Проверьте правильность номеров версий.
Это сработало для меня.
Ответ 8
Кроме того, вы можете просто обновить корпоративную библиотеку до последней версии.
Ответ 9
Несмотря на то, что исходный вопрос был опубликован 5 лет назад, проблема все еще сохраняется и довольно раздражает.
Пример вывода:
Ответ 10
У меня была схожая проблема. ** Ответ Juntos правильный **, но вы должны отметить один важный совет!
Для единства 2.1.505.2 указаны различные AssemblyVersion и AssemblyFileVersion:
AssemblyFileVersion используется nuget, но CLR не заботится об этом! CLR будет использовать только AssemblyVersion !
Поэтому перенаправления должны применяться к версии, указанной в AssemblyVersion: 2.1.505.0
Ответ 11
В проводнике решений щелкните правой кнопкой мыши по проекту (а не по решению), на вкладке сборки выберите Платформа цели: "Любой процессор".
Ответ 12
Я также получил эту ужасную ошибку и нашел решение для этого.
- Щелкните правой кнопкой мыши по имени решения
- Нажмите "Чистое решение"
- Перезапустить Visual Studio
- Перейти к проекту Свойства → Сборка
- Измените Конфигурация на Отпустить
- Начать отладки (F5)
1), 2)
4), 5)
Надеюсь, это тоже поможет.
Ответ 13
- Перейти: Решение → Пакет
- Нажмите вкладку Дополнительно (найдите под страницей)
- Добавьте dll к дополнительным сборкам (таким образом мы можем добавить внешние DLL в sharepoint).
Ответ 14
Не уверен, что это может помочь.
Проверьте соответствие имени Assembly и пространства имен Default в свойствах в ваших ассамблях. Это разрешило мою проблему, которая дала ту же ошибку.
Ответ 15
Спасибо Ридди М. После меня работали.
Ответ 16
В моем случае в папке bin была не ссылочная dll под названием Unity.MVC3, я безуспешно пытался найти любую ссылку на это в visual studio, поэтому мое решение было так просто, как удалить эту DLL из папки bin.
Ответ 17
Вы говорите, что у вас много проектов в вашем решении. ну, начните с одного около вершины порядка сборки. Получите это, чтобы построить, и как только вы это выясните, вы можете применить одно и то же исправление к остальным.
Честно говоря, вам, вероятно, просто нужно обновить свою ссылку. Похоже, что вы либо обновили свою версию, либо не обновили ссылки, либо это относительный путь, если вы держите свое решение в контроле источника. Просто подтвердите свои предположения и повторно добавьте ссылку.
Ответ 18
После меня работали.
Ответ 19
Эта проблема произошла со мной, когда одна из моих зависимых библиотек составляла DLL с "Any CPU", когда родительская библиотека ожидала компиляцию "x64".
Ответ 20
Вам нужно удалить файл appname.dll из выходной папки. Отладка и удаление папок. Перестройте и скопируйте в файл регенерированной DLL файла.
Ответ 21
I "Установить как проект запуска" незагруженную/необоснованную библиотеку/проект.
Затем развернул его.
Я думаю, что он не смог найти .dll, потому что он не был в сборке сначала.
Ответ 22
Другая возможная причина: убедитесь, что вы случайно не дали обоим проектам одно и то же имя сборки в свойствах проекта.
Ответ 23
Ответ 24
Следите за противоречивыми ссылками. Даже после чистых и перестроенных противоречивых ссылок все еще будет возникать проблема. Моя проблема заключалась между Афором и Согласием. Я удалил обе ссылки и снова добавил ссылки, переустанавливая конкретную ссылку (в частности, для моего случая, просто для Accord).
Ответ 25
Ответ 26
Вот что сработало для меня:
- Удалить ссылку
- Переименовать DLL
- Импортировать ссылку снова
Второй шаг был важен, по-видимому, так как он не работал без него.
Ответ 27
Попробуйте проверить, установлено ли для свойства "Копировать в локальное" значение true, а для конкретной версии установлено значение "Истина". Это относится к приложениям в Visual Studio.
Ответ 28
У меня было это сегодня, и в моем случае проблема была очень странной:
Обратите внимание на блуждающих символов в конце XML - так или иначе они были перемещены из номера версии в конец этого блока XML!
Изменилось выше и вуаля! Все снова работало.
Ответ 29
У меня была та же проблема, я решил ее с помощью инструкций ниже:
- откройте меню инструментов и выберите опцию
- в настройках окна перейдите в раздел Проекты и решения/Веб-проекты
- проверьте use the 64bit version of IIS.
Ответ 30
Если это не работает, пожалуйста, не злоупотребляйте мной. я также младший
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Исключение, которое выдается при недопустимом образе файла библиотеки динамической компоновки (DLL) или выполняемой программы.
Комментарии
Это исключение возникает, если формат файла динамической библиотеки ссылок (.dll файла) или исполняемого файла (.exe файла) не соответствует формату, который ожидает среда CLR. В частности, исключение возникает при следующих условиях:
Вы пытаетесь загрузить эталонную сборку в контексте, отличном от контекста только для отражения. Эту проблему можно решить двумя способами:
- Сборку реализации можно загрузить, а не эталонную.
- Вы можете загрузить эталонную сборку в контексте только для отражения, вызвав Assembly.ReflectionOnlyLoad метод.
Библиотека DLL или исполняемый файл загружается как 64-разрядная сборка, но содержит 32-разрядные компоненты или ресурсы. Например, он использует com-взаимодействие или вызывает методы в 32-разрядной библиотеке динамических ссылок.
Чтобы устранить это исключение, задайте целевому свойству платформы проекта значение x86 (вместо x64 или AnyCPU) и перекомпилируйте его.
Отражение исполняемых файлов C++ может вызвать это исключение. Причина этого, вероятнее всего, в том, что компилятор C++ чередует адреса переадресации и раздел .Reloc исполняемого файла. Чтобы сохранить адреса переадресации в исполняемом файле C++, укажите при компоновке параметр /fixed:no .
BadImageFormatException использует HRESULT COR_E_BADIMAGEFORMAT , имеющий значение 0x8007000B.
Список начальных значений свойств для экземпляра BadImageFormatException, см. в разделе BadImageFormatException конструкторы.
Конструкторы
Инициализирует новый экземпляр класса BadImageFormatException.
Инициализирует новый экземпляр класса BadImageFormatException с сериализованными данными.
Требования
Перед установкой сборки в кэше глобальной сборки можно выполнить следующие требования:
В этой статье предполагается, что вы знакомы со следующими разделами:
Проверка установки сборки в глобальном кэше сборки
Чтобы убедиться, что сборка установлена в кэше глобальной сборки, можно использовать средство Кэш глобальной сборки. Для этого выполните следующие действия:
Выберите Начните, выберите Выполнить, введите cmd, а затем выберите ОК.
Чтобы отобразить сведения об установке сборки GACDemo, используйте средство Кэш глобальной сборки. Для этого введите команду gacutil -l GACDemo в командной подсказке и нажмите кнопку ENTER.
Свойства
Возвращает коллекцию пар «ключ-значение», предоставляющую дополнительные сведения об исключении.
Возвращает имя файла, вызвавшего данное исключение.
Возвращает имя журнала, в котором описано, почему загрузка сборки не выполнена.
Получает или задает ссылку на файл справки, связанный с этим исключением.
Возвращает или задает HRESULT — кодированное числовое значение, присвоенное определенному исключению.
Возвращает экземпляр класса Exception, который вызвал текущее исключение.
Возвращает или задает имя приложения или объекта, вызывавшего ошибку.
Получает строковое представление непосредственных кадров в стеке вызова.
Возвращает метод, создавший текущее исключение.
ОТВЕТЫ
Ответ 1
Ответ 2
BadImageFormatException , по моему опыту, почти всегда связан с x86 и x64 скомпилированными сборками. Похоже, ваша сборка С++ скомпилирована для x86, и вы работаете в процессе x64. Это правильно?
Вместо использования AnyCPU/Mixed в качестве платформы. Попробуйте вручную установить его на x86 и посмотреть, будет ли он работать после этого.
Надеюсь, что это поможет.
Ответ 3
Я нашел еще одну странную причину, и я подумал, что другой разработчик смутил меня. Я запустил install.bat, созданный для установки моего сервиса в Командная строка разработчика VS2010, но моя служба сгенерирована в VS2012. он шел к этой ошибке и сводит меня с ума, но я пытаюсь использовать VS2012 Developer Command Prompt, и все пошло бы в порядке. Я не знаю почему, но моя проблема была решена. так что вы можете проверить его, и если кто-нибудь знает причину этого, пожалуйста, поделитесь с нами. Спасибо.
Ответ 4
Проверьте, является ли манифест допустимым xml файлом. У меня была та же проблема, выполнив команду копирования DOS в конце сборки, и выяснилось, что по какой-то причине я не могу понять, что "копия" заключалась в добавлении странного символа (- > ) в конце файлов манифеста. Проблема была решена путем добавления переключателя "/b" для принудительной бинарной копии.
Ответ 5
Сначала попробуйте открыть файл с помощью декомпилятора, такого как ILSpy, ваша dll может быть повреждена. У меня была эта ошибка на онлайн-сайте, когда я загрузил DLL и попытался ее открыть, он был поврежден, вероятно, произошла ошибка при загрузке через ftp.
У меня есть еще одна из этих проблем "Не удалось загрузить файл или сборку или одну из ее зависимостей".
Дополнительная информация: Не удалось загрузить файл или сборка "Microsoft.Practices.Unity, Версия = 1.2.0.0, Культура = нейтральная, PublicKeyToken = 31bf3856ad364e35 'или одной из его зависимостей. Расположенные определение манифеста сборки не соответствуют ссылочной позиции сборки. (Исключение из HRESULT: 0x80131040)
Я не знаю, что вызывает это или как я могу отладить его, чтобы найти причину.
Я выполнил поиск в каталогах решений .csproj, и каждый раз, когда у меня есть Unity, я:
Ссылка Include = "Microsoft.Practices.Unity, Версия = 2.0.414.0, Культура = нейтральная, PublicKeyToken = 31bf3856ad364e35, processorArchitecture = MSIL"
Невозможно найти какую-либо ссылку в любом месте, которая идет против 1.2.0.0 в любом из моих проектов.
Любые идеи, как я должен решить это?
Я также хотел бы узнать, как отлаживать такие проблемы в целом.
Подписание с сильным именем
Сборка должна иметь сильное имя, которое должно быть установлено в глобальном кэше сборки. Сильное имя — это уникальный идентификатор глобального масштаба, который не может быть подменен кем-то другим. Используя сильное имя, вы не позволяете компонентам с одинаковым именем конфликтовть друг с другом или неправильно использовать их в вызываемом приложении. Подписание сборки связывает крепкое имя вместе со сборкой. Подписание сборки также называется подписью с сильным именем. Сильное имя состоит из следующих сведений:
- Простое текстовое имя сборки
- Номер версии сборки
- Сведения о культуре сборки, если эти сведения предоставлены
- Пара общедоступных ключей и частных ключей
Эти сведения хранятся в файле ключей. Ключевой файл — это файл Exchange (.pfx) или сертификат из магазина сертификатов Microsoft Windows текущего пользователя.
Вы можете подписать сборку, используя параметры на вкладке Подписание Project конструктора в Visual Studio. В Visual Studio файл ключа должен храниться в папке проекта на локальном компьютере. Visual Studio поддерживает только следующие форматы файлов:
- Файлы персональных Exchange (.pfx)
- Файлы клавиши strong name (.snk)
Методы
Определяет, равен ли указанный объект текущему объекту.
При переопределении в производном классе возвращает исключение Exception, которое является первопричиной одного или нескольких последующих исключений.
Служит хэш-функцией по умолчанию.
Задает для объекта SerializationInfo имя файла, журнал кэша сборок и дополнительные сведения об исключении.
При переопределении в производном классе задает объект SerializationInfo со сведениями об исключении.
Возвращает тип среды выполнения текущего экземпляра.
Создает неполную копию текущего объекта Object.
Установка сборки в глобальном кэше сборки
Этот метод основан на создании сборки с помощью Visual Studio. Чтобы создать сборку, которую можно совместно использовать несколькими приложениями, общая сборка должна иметь сильное имя. Кроме того, общая сборка должна быть развернута в глобальном кэше сборки.
- Запустите Visual Studio.
- В меню File выберите new Project.
- В списке Шаблоны выберите библиотеку классов.
- В поле Имя введите GACDemo и выберите ОК.
- Чтобы сохранить проект, нажмите кнопку CTRL+SHIFT+S.
- В поле Расположение введите C:\DemoProjects .
- Очистить каталог Create для проверки решения, а затем выберите Сохранить.
Создание сильного имени и связывание файла ключа с сильным именем вместе со сборкой. Для этого выполните следующие действия:
В меню Project выберите свойства GACDemo.
На вкладке Подписи установите флажок Подписать сборку.
В статье Выберите файл ключа с сильным именем, выберите .
В диалоговом окне Create Strong Name Key выберите файл Protect my key с помощью контрольного окна пароля.
В поле имя файла Key введите GACDemo.
В поле Ввод пароля введите пароль, который необходимо использовать.
В поле Подтверждение пароля введите один и тот же пароль, а затем выберите ОК.
Мы рекомендуем всегда использовать пароль при создании файла ключей. Новый файл ключа, защищенный паролем, всегда создается в формате файла .pfx.
Чтобы составить проект, нажмите кнопку CTRL+SHIFT+B.
Для установки файла .dll в кэше глобальной сборки не требуется дополнительный код.
Установите файл .dll, созданный на шаге 2 в глобальном кэше сборки с помощью средства кэша Глобальной сборки. Для этого выполните следующие действия:
- Выберите Начните, выберите Выполнить, введите cmd, а затем выберите ОК.
- Измените текущий рабочий каталог в каталог, в котором установлен платформа .NET Framework SDK.
- В командной подсказке введите gacutil -I "C:\DemoProjects\GACDemo\bin\Release\GACDemo.dll" команду и нажмите кнопку ENTER.
Сводка
События
Возникает, когда исключение сериализовано для создания объекта состояния исключения, содержащего сериализованные данные об исключении.
Сборка
Сборка содержит один или несколько компонентов кода, выполняемые общим языковым временем выполнения. Все типы и все ресурсы в одной сборке образуют индивидуальную версию устройства. Манифест сборки описывает зависимости версий, которые указаны для любых зависимых сборок. С помощью сборки можно указать правила версии между различными компонентами программного обеспечения, и эти правила можно применять во время запуска. Сборка поддерживает одностороннее выполнение. WHich позволяет одновременно запускать несколько версий.
ОТВЕТЫ
Ответ 1
Ответ 2
BadImageFormatException , по моему опыту, почти всегда связан с x86 и x64 скомпилированными сборками. Похоже, ваша сборка С++ скомпилирована для x86, и вы работаете в процессе x64. Это правильно?
Вместо использования AnyCPU/Mixed в качестве платформы. Попробуйте вручную установить его на x86 и посмотреть, будет ли он работать после этого.
Надеюсь, что это поможет.
Ответ 3
Я нашел еще одну странную причину, и я подумал, что другой разработчик смутил меня. Я запустил install.bat, созданный для установки моего сервиса в Командная строка разработчика VS2010, но моя служба сгенерирована в VS2012. он шел к этой ошибке и сводит меня с ума, но я пытаюсь использовать VS2012 Developer Command Prompt, и все пошло бы в порядке. Я не знаю почему, но моя проблема была решена. так что вы можете проверить его, и если кто-нибудь знает причину этого, пожалуйста, поделитесь с нами. Спасибо.
Ответ 4
Проверьте, является ли манифест допустимым xml файлом. У меня была та же проблема, выполнив команду копирования DOS в конце сборки, и выяснилось, что по какой-то причине я не могу понять, что "копия" заключалась в добавлении странного символа (- > ) в конце файлов манифеста. Проблема была решена путем добавления переключателя "/b" для принудительной бинарной копии.
Ответ 5
Сначала попробуйте открыть файл с помощью декомпилятора, такого как ILSpy, ваша dll может быть повреждена. У меня была эта ошибка на онлайн-сайте, когда я загрузил DLL и попытался ее открыть, он был поврежден, вероятно, произошла ошибка при загрузке через ftp.
Сведения об исключении: System.BadImageFormatException: Не удалось загрузить файл или файл сборки:///D:\Projects\Development\ProGamers\GamingSite\bin\avcodec-52.dll или одна из его зависимостей. Ожидается, что модуль будет содержать манифест сборки.
Вещи, которые я пробовал:
Обработка DLL, но она по-прежнему не работает (файл существует).
Зарегистрировать его в GAC, но у меня там такая же ошибка.
Читайте также: