Подтвердить что ты не робот

Ожидается, что модуль будет содержать манифест сборки

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

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

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

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

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

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

[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
4b9b3361

Ответ 1

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

Ответ 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.

Ответ 6

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

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