Когда я пытаюсь получить доступ к странице (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
Исключение BadImageFormatException
возникает, когда файл сборки может быть найден, но не является правильной сборкой или поврежден. Например, если вы отправили файлы на сервер по FTP и передача была прервана, файл DLL мог быть передан только частично, что и привело к возникновению этой ошибки.
В 64-битной и 32-битной версиях: когда вы используете P/Invoke или COM Interop, некоторые блоггеры сообщают, что в вашей ситуации может помочь переключение на конкретную целевую компиляцию. Это означает: если вы взаимодействуете с 32-битной dll, убедитесь, что вы скомпилировали для x86
, заставив ее работать под WoW32, иначе вы получите это исключение. Это исправление подтверждено здесь и здесь.
Кроме того, вы можете настроить всю систему на 32-разрядную по умолчанию, выполнив команду:
Ldr64.exe setwow
из каталога Framework64
.
Распространенным решением является пересборка файла или, по крайней мере, его повторная публикация.
Использует ли ваш веб-сайт DefaultAppPool? Если это так, попробуйте настроить пул приложений вашего веб-сайта на ASP .Net v4.0, Или, если вы используете настраиваемый пул приложений, убедитесь, что он работает под управлением .net framework 4.0
.