BadImageFormatException во время проблемы загрузки сборки .Net - PullRequest
19 голосов
/ 29 августа 2010

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

Кстати: я использую 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

Ответы [ 4 ]

16 голосов
/ 29 августа 2010

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

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

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

Ldr64.exe setwow

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

Распространенным решением является перестройка файла или, по крайней мере, его повторная публикация.

8 голосов
/ 07 сентября 2015

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

Чтобы исправить это, мне пришлось установить «Включить 32-битные приложения» в True в расширенных настройках пула приложений.

2 голосов
/ 29 августа 2010

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

.
0 голосов
/ 28 июня 2019

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

Import-Module WebAdministration
Set-ItemProperty IIS:\AppPools\DefaultAppPool\ -Name enable32BitAppOnWin64 -Value $true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...