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

Исключение BadImageFormatException во время загрузки сборки .Net

Когда я пытаюсь получить доступ к странице (default.aspx) на веб-сайте в IIS 7.0 (разработанном с использованием VSTS 2010 +.Net 4.0 в Windows Server 2008), я встретил следующее сообщение об ошибке. Какие-нибудь идеи, что не так? Что значит BadImageFormatException?

BTW: Я запускаю 64-разрядную версию Windows Server 2008 (не R2) и еще не активировал Windows Server 2008, может ли это быть основной причиной?

[BadImageFormatException: Could not load file or assembly 'test.foo' or one of its dependencies. Try to load bad formatted program. ]
   System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +0
   System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection, Boolean suppressSecurityChecks) +567
   System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +192
   System.Reflection.Assembly.Load(String assemblyString) +35
   System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +118

[ConfigurationErrorsException: Could not load file or assembly 'test.foo' or one of its dependencies.  Try to load bad formatted program. ]
   System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +11392147
   System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() +484
   System.Web.Configuration.AssemblyInfo.get_AssemblyInternal() +127
   System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig) +334
   System.Web.Compilation.BuildManager.CallPreStartInitMethods() +280
   System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +1087

[HttpException (0x80004005): Could not load file or assembly 'test.foo' or one of its dependencies.  Try to load bad formatted program. ]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +11524352
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +141
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +4782309
4b9b3361

Ответ 1

BadImageFormatException возникает, когда файл сборки может быть найден, но не является надлежащей сборкой или поврежден. Например, если вы FTP'или файлы на сервер и передача была прервана, DLL файл мог быть передан только частично, что вызвало эту ошибку.

В 64-битном сравнении с 32-битным: когда вы используете P/Invoke или COM Interop, некоторые отчеты блогера, что переход на конкретную целевую компиляцию может помогите вашей ситуации. Это означает: если вы взаимодействуете с 32-разрядной dll, убедитесь, что вы компилируете для x86, заставляя его запускаться под WoW32, иначе вы получите это исключение. Это исправление подтверждено здесь и здесь.

В качестве альтернативы вы можете настроить всю систему по умолчанию на 32-разрядную, выполнив команду:

Ldr64.exe setwow

из каталога Framework64.

Общим решением является пересоздание файла или, по крайней мере, его повторная публикация.

Ответ 2

Я просто получил это при развертывании 32-битных DLL на 64-битный сервер с IIS 7.

Чтобы исправить это, мне пришлось установить "Включить 32-разрядные приложения" в "Истина" в "Расширенных настройках" моего пула приложений.

Ответ 3

Использует ли ваш веб-сайт DefaultAppPool? Если да, попробуйте настроить пул приложений вашего веб-сайта на ASP.Net v4.0, Или, если вы используете настраиваемый пул приложений, убедитесь, что он запущен .net framework 4.0

Ответ 4

Это произошло со мной на виртуальной машине, где мне нужно было включить 32-битные приложения в пуле приложений и я мог сделать это с помощью powershell:

Import-Module WebAdministration
Set-ItemProperty IIS:\AppPools\DefaultAppPool\ -Name enable32BitAppOnWin64 -Value $true