Модуль должен был содержать манифест сборки

У меня есть проект в C#, который использует библиотеку C++ и некоторые библиотеки DLL. Когда я запускаю его, он прекрасно работает.

Библиотека Awesomium, содержит как библиотеку C++, так и обертки C#

Когда я создаю ссылку на этот проект из моего проекта ASP.NET MVC 4, я получаю следующую ошибку:

Сведения об исключении: System.BadImageFormatException: Не удалось загрузить файл или сборку 'file:///D:\Projects\Development\ProGamers\GamingSite\bin\avcodec-52.dll' или одну из ее зависимостей. Модуль должен был содержать манифест сборки.

Вещи, которые я пробовал:

  1. Копирую dll, но все равно не работает (файл существует).

  2. Регистрация в GAC, но у меня там та же ошибка.

  3. Убедитесь, что используете.NET Framework 4.0 (а не профиль клиента)

  4. 2 файла с одинаковым именем dll/exe вызывают конфликт - у меня его нет.

  5. Измените платформу решения на AnyCPU/ Смешанные платформы.

Трассировки стека:

[BadImageFormatException: Could not load file or assembly 'file:///D:\Projects\Development\ProGamers\GamingSite\bin\avcodec-52.dll' or one of its dependencies. The module was expected to contain an assembly manifest.]
   System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +0
   System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +34
   System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +152
   System.Reflection.RuntimeAssembly.InternalLoadFrom(String assemblyFile, Evidence securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm, Boolean forIntrospection, Boolean suppressSecurityChecks, StackCrawlMark& stackMark) +102
   System.Reflection.Assembly.LoadFrom(String assemblyFile) +34
   WebActivator.ActivationManager.Run() +190

[InvalidOperationException: The pre-application start initialization method Run on type WebActivator.ActivationManager threw an exception with the following error message: Could not load file or assembly 'file:///D:\Projects\Development\ProGamers\GamingSite\bin\avcodec-52.dll' or one of its dependencies. The module was expected to contain an assembly manifest..]
   System.Web.Compilation.BuildManager.InvokePreStartInitMethodsCore(ICollection`1 methods, Func`1 setHostingEnvironmentCultures) +550
   System.Web.Compilation.BuildManager.InvokePreStartInitMethods(ICollection`1 methods) +132
   System.Web.Compilation.BuildManager.CallPreStartInitMethods(String preStartInitListPath) +90
   System.Web.Compilation.BuildManager.ExecutePreAppStart() +135
   System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +516

[HttpException (0x80004005): The pre-application start initialization method Run on type WebActivator.ActivationManager threw an exception with the following error message: Could not load file or assembly 'file:///D:\Projects\Development\ProGamers\GamingSite\bin\avcodec-52.dll' or one of its dependencies. The module was expected to contain an assembly manifest..]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +9850940
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +101
   System.Web.HttpRuntime.ProcessRequestInternal(HttpWorkerRequest wr) +456

9 ответов

Я обнаружил, что я использую другой InstallUtil из моей целевой.NET Framework. Я создаю.NET Framework 4.5, в то же время ошибка произошла, если я использую.NET Framework 2.0. Используя правильный InstallUtil для моей целевой платформы.NET Framework, мы решили эту проблему!

BadImageFormatExceptionПо моему опыту, это почти всегда связано с скомпилированными сборками x86 и x64. Похоже, ваша сборка C++ скомпилирована для x86, и вы работаете в процессе x64. Это верно?

Вместо того, чтобы использовать AnyCPU/Mixed в качестве платформы. Попробуйте вручную установить его x86 и посмотрим, будет ли он работать после этого.

Надеюсь это поможет.

Сначала попробуйте открыть файл с помощью декомпилятора, такого как ILSpy, ваша DLL может быть повреждена. У меня была эта ошибка на онлайн-сайте, когда я скачал dll и попытался открыть его, он был поврежден, возможно, произошла ошибка при загрузке через ftp.

Я получил ошибку в следующем случае:

  1. Файл.NET EXE (#1) ссылался на другой файл.NET EXE (#2)
  2. Я пытался запутать EXE #2 с Themida
  3. при запуске EXE #1 происходит сбой с ошибкой "Модуль должен содержать манифест сборки"

Я просто избежал запутывания и ошибка ушла. не настоящее решение, но, по крайней мере, я знаю, что вызвало это...

В моем случае я использовал InstallUtil.exeчто вызывало ошибку. Чтобы установить.Net Core сервис в окне лучший способ использовать sc команда.

Подробнее об ошибке установки Exe. Ожидается, что модуль будет содержать манифест сборки.Net Core.

Проверьте, является ли манифест действительным файлом XML. У меня была та же проблема, когда я выполнял команду копирования DOS в конце сборки, и оказалось, что по какой-то причине я не могу понять, что "копирование" добавляло странный символ (->) в конце файлов манифеста. Проблема была решена добавлением ключа /b для принудительного двоичного копирования.

Я нашел другую странную причину, и я подумал, может быть, другой разработчик смутился как я Я запустил install.bat, который был создан для установки моего сервиса в командной строке разработчика VS2010, но мой сервис сгенерирован в VS2012. это приводило к этой ошибке и сводило меня с ума, но я пробовал инструменты командной строки VS2012 Developer и все прошло хорошо. Не знаю почему, но моя проблема была решена. так что вы можете проверить это, и если кто-то знает причину этого, пожалуйста, поделитесь с нами. Благодарю.

В моем случае это произошло потому, что код пытался создатьAssemblyCatalogдля DLL, которая не была сборкой C#. Было достаточно легко поймать и проигнорировать любую такую ​​DLL. К сожалению, Visual Studio (по крайней мере, 2017) не может взломатьBadImageFormatExceptionс. (Он делает вид, что разрешает это в Debug -> Windows -> Настройки исключений -> Исключения общеязыковой среды выполнения -> System.BadImageFormatException, но на самом деле это не работает.) Так что мне потребовалось немного больше времени, чтобы отследить эту проблему.

Удаление файла .InstallState и переустановка службы исправили это для меня.

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