2010-08-29 16 views
18

Cuando intento acceder a una página (default.aspx) en un sitio web en IIS 7.0 (desarrollado mediante VSTS 2010 + .Net 4.0 en Windows Server 2008), me encontré con el siguiente error mensaje. ¿Alguna idea de lo que está mal? ¿Qué significa BadImageFormatException?BadImageFormatException durante .Net carga de ensamblaje problema

BTW: Estoy ejecutando Windows Server 2008 de 64 bits (no R2) y aún no estoy activado Windows Server 2008, ¿podría ser una causa raíz?

 
[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 
+1

Creo que su nombre de ensamblaje carece de ".dll". Proporcione el fragmento de código. –

+3

discrepancia de 64 bits/32 bits? ¿Compiló sus ensamblajes para una plataforma específica? – Alex

+0

"Creo que el nombre de su ensamblaje carece de" .dll ". Proporcione el fragmento de código". - Desde la pista de pila, creo que todo el seguimiento de la pila de código no está en mi propio código, parece que el propio código .Net? ¿Qué debo hacer con .dll y qué fragmento de código necesita para analizar este problema? – George2

Respuesta

15

El BadImageFormatException se eleva cuando el archivo de ensamblaje se puede encontrar, pero no es un ensamblaje correcto o está dañado. Por ejemplo, si transfirió los archivos FTP al servidor y se interrumpió la transferencia, es posible que el archivo DLL se haya transferido solo parcialmente, lo que ha provocado este error.

En 64 bit vs 32 bit: cuando utiliza P/Invoke o COM Interop, some blogger reports que cambiar a una compilación de destino específica puede ayudar a su situación. Esto significa que si interactúa con un dll de 32 bits, asegúrese de compilar para x86, forzándolo a ejecutarse bajo WoW32, de lo contrario, recibirá esta excepción. Esta solución es confirmed here y here.

Como alternativa, puede configurar todo el sistema por defecto de 32 bits ejecutando el comando:

 
Ldr64.exe setwow 

desde el directorio Framework64.

Una solución común es reconstruir el archivo, o al menos volver a publicarlo.

+0

¿Quieres decir que test.foo.dll está dañado o algunos otros archivos DLL del sistema? – George2

+1

@ George2: me refiero a test.foo.dll está dañado, pero vea mis nuevas notas en el 32 bit vs 64 bit, que puede parecer contra-intuitivo. – Abel

+0

Gracias por su actualización @Abel, ¿quiere decir que debería reconstruir la solución a la plataforma de 64 bits (ya que mi Windows Server 2008 es de 64 bits)? – George2

2

¿Su sitio web utiliza DefaultAppPool? Si es así, intente configurar el grupo de aplicaciones de su sitio web a ASP .Net v4.0, O si está utilizando un grupo de aplicaciones a medida, verificar que se está ejecutando .NET Framework 4.0

+0

Estoy usando un nuevo grupo de aplicaciones. Lo configuré para usar .Net 4.0 Framework ya y usando el modo integrado. ¿Algunas ideas? – George2

+0

¿Podría este problema ser causado por mi Windows Server 2008 no activado (aún no ingresé un número de licencia)? – George2

+1

¿Con qué plataforma está construyendo su solución? Cualquier CPU? x86? No creo que sea un problema de activación. ¿Está utilizando terceros? – sagie

6

acabo de recibir esto cuando el despliegue de 32 bits DLL en un servidor en funcionamiento de 64 bits de IIS 7.

Para solucionarlo, tuve que ajustar "Habilitar aplicaciones de 32 bits" True en la configuración avanzada de mi solicitud piscina.

+0

Esto fue todo para mí, gracias +1 – Lee

Cuestiones relacionadas