2010-08-29 9 views
18

Quando si tenta di accedere a una pagina (default.aspx) in un sito Web in IIS 7.0 (sviluppato utilizzando VSTS 2010 + .Net 4.0 su Windows Server 2008), ho riscontrato il seguente errore Messaggio. Qualche idea, cosa c'è che non va? Cosa significa BadImageFormatException?BadImageFormatException durante il problema di carico dell'assieme .Net

BTW: eseguo Windows Server 2008 a 64 bit (non R2) e non è ancora stato attivato Windows Server 2008, potrebbe essere una causa principale?

 
[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

Penso che il nome dell'assembly manchi ".dll". Si prega di fornire lo snippet di codice. –

+3

Mancata corrispondenza 64-bit/32 bit? Hai compilato i tuoi assembly per una piattaforma specifica? – Alex

+0

"Penso che il nome dell'assembly manchi" .dll ". Fornisci lo snippet di codice." - Dalla traccia dello stack, penso che tutta la traccia dello stack del codice non sia nel mio codice, sembra proprio il codice? Che cosa devo fornire e quale frammento di codice hai bisogno per analizzare questo problema? – George2

risposta

15

Il BadImageFormatException viene generato quando il file assembly può essere trovato, ma non è un assembly corretto o è corrotto. Ad esempio, se i file FTP sono stati inviati al server e il trasferimento è stato interrotto, il file DLL potrebbe essere stato trasferito solo parzialmente, causando l'errore.

Su 64 bit contro 32 bit: quando si utilizza P/Invoke o COM Interop, some blogger reports il passaggio a una specifica compilation di destinazione può aiutare la situazione. Ciò significa che se si interfaccia con una DLL a 32 bit, assicurarsi di compilare per x86, forzandolo a eseguire in WoW32, altrimenti si riceverà questa eccezione. Questa correzione è confirmed here e here.

In alternativa, è possibile impostare l'intero sistema per difetto a 32 bit eseguendo il comando:

 
Ldr64.exe setwow 

dalla directory Framework64.

Una soluzione comune è ricostruire il file o almeno ri-pubblicarlo.

+0

Intendi che test.foo.dll è corrotto o altre DLL di sistema? – George2

+1

@ George2: Intendo test.foo.dll è danneggiato, ma guarda le mie nuove note sul 32 bit contro 64 bit, che può sembrare contro-intuitivo. – Abel

+0

Grazie per l'aggiornamento @Abel, vuoi dire che dovrei ricostruire la soluzione sulla piattaforma a 64 bit (dato che il mio Windows Server 2008 è a 64 bit)? – George2

2

Il tuo sito Web utilizza DefaultAppPool? In tal caso, provare a impostare il pool di applicazioni del vostro sito Web per ASP .Net v4.0, Oppure, se si utilizza un pool di app personalizzata, verificare che sia in esecuzione .NET framework 4.0

+0

Sto usando un nuovo pool di applicazioni. L'ho impostato per utilizzare .Net 4.0 Framework già e utilizzando la modalità integrata. Qualche idea? – George2

+0

Questo problema potrebbe essere causato dal mio Windows Server 2008 non attivato (non ho ancora inserito un numero di licenza)? – George2

+1

Con quale piattaforma stai costruendo la tua soluzione? Qualche CPU? x86? Non penso che sia un problema di attivazione. Stai usando terze parti? – sagie

6

Ho appena ricevuto questo durante la distribuzione di 32 bit DLL su un server in esecuzione a 64 bit di IIS 7.

Per risolvere il problema, ho dovuto impostare "Attiva applicazioni a 32 bit" True nelle impostazioni avanzate della mia domanda piscina.

+0

Questo è stato per me, grazie +1 – Lee

Problemi correlati