2010-08-29 5 views
18

Wenn ich auf einer Website in IIS 7.0 (entwickelt mit VSTS 2010 + .Net 4.0 unter Windows Server 2008) auf eine Seite (default.aspx) zugreifen möchte, trat der folgende Fehler auf Botschaft. Irgendwelche Ideen was ist falsch? Was bedeutet BadImageFormatException?BadImageFormatException während .Net-Assembly load Problem

BTW: Ich verwende Windows Server 2008 64 Bit (nicht R2) und nicht aktiviert Windows Server 2008 noch, könnte es eine Ursache sein?

 
[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

Ich denke, Ihr Assemblynamen fehlt ".dll". Bitte geben Sie das Code-Snippet an. –

+3

Falsche 64-Bit/32-Bit-Übereinstimmung? Haben Sie Ihre Assemblies für eine bestimmte Plattform zusammengestellt? – Alex

+0

"Ich denke, dass Ihr Assemblynamen" .dll "fehlt. Bitte geben Sie das Code-Snippet an." - Von der Stack-Spur, ich denke, alle Code-Stack-Trace sind nicht in meinem eigenen Code, es scheint .Net eigenen Code? Welche .dll muss ich bereitstellen und welches Code-Snippet benötigst du, um dieses Problem zu analysieren? – George2

Antwort

15
läuft

Die BadImageFormatException angehoben wird, wenn Die Assemblydatei kann gefunden werden, ist jedoch keine ordnungsgemäße Assembly oder ist beschädigt. Wenn Sie beispielsweise die Dateien auf den Server übertragen und die Übertragung unterbrochen wurde, wurde die DLL-Datei möglicherweise nur teilweise übertragen, wodurch dieser Fehler verursacht wurde.

Bei 64 Bit im Vergleich zu 32 Bit: Wenn Sie P/Invoke oder COM Interop, some blogger reports, verwenden, kann das Umschalten auf eine bestimmte Zielkompilierung Ihrer Situation helfen. Das bedeutet: Wenn Sie mit einer 32-Bit-DLL arbeiten, stellen Sie sicher, dass Sie für x86 kompilieren, damit es unter WoW32 läuft, sonst erhalten Sie diese Ausnahme. Dieser Fix ist confirmed here und here.

Alternativ können Sie Ihr gesamtes System, indem Sie den Befehl 32-Bit auf Standard:

 
Ldr64.exe setwow 

aus dem Framework64 Verzeichnis.

Eine gängige Lösung besteht darin, die Datei neu zu erstellen oder zumindest erneut zu veröffentlichen.

+0

Sie meinen, test.foo.dll selbst ist beschädigt oder einige andere System-DLLs? – George2

+1

@ George2: Ich meine test.foo.dll ist beschädigt, aber sehen Sie meine neuen Notizen auf dem 32 Bit vs 64 Bit, die möglicherweise kontraintuitiv scheinen. – Abel

+0

Danke für Ihr Update @Abel, meinen Sie, ich sollte die Lösung auf 64-Bit-Plattform neu aufbauen (da mein Windows Server 2008 64-Bit ist)? – George2

2

Verwendet Ihre Website den DefaultAppPool? Wenn ja, versuchen Sie den Anwendungspool von Ihrer Website ASP .Net v4.0 Einstellung Oder wenn Sie eine angepasste Anwendungspool verwenden, stellen Sie sicher, dass es .net Framework 4.0

+0

Ich verwende einen neuen Anwendungspool. Ich habe es festgelegt, .NET 4.0 Framework bereits zu verwenden und integrierten Modus. Irgendwelche Ideen? – George2

+0

Könnte dieses Problem dadurch verursacht werden, dass Windows Server 2008 nicht aktiviert ist (ich habe noch keine Lizenznummer eingegeben)? – George2

+1

Mit welcher Plattform bauen Sie Ihre Lösung? Irgendeine CPU? x86? Ich glaube nicht, dass es ein Aktivierungsproblem ist. Verwenden Sie Dritte? – sagie

6

ich dies nur bekam, als 32-Bit-DLLs auf einem 64-Bit-Server läuft die Bereitstellung von IIS 7

es zu beheben, musste ich „Enable 32-Bit-Anwendungen“ auf True in den erweiterten Einstellungen meiner Anwendung einstellen Schwimmbad.

+0

Das war es für mich, danke +1 – Lee

Verwandte Themen