2010-08-29 5 views
18

Lorsque j'essaie d'accéder à une page (default.aspx) dans un site Web dans IIS 7.0 (développé à l'aide de VSTS 2010 + .Net 4.0 sur Windows Server 2008), j'ai rencontré l'erreur suivante message. Des idées ce qui ne va pas? Que signifie BadImageFormatException? BTW: Je cours Windows Server 2008 64 bits (pas R2) et pas encore activé Windows Server 2008, pourrait-il être une cause première?BadImageFormatException lors du chargement de l'assembly .Net problème

 
[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

Je pense que votre nom d'assembly manque ".dll". Veuillez fournir l'extrait de code. –

+3

Incompatibilité 64 bits/32 bits? Avez-vous compilé vos assemblées pour une plate-forme spécifique? – Alex

+0

"Je pense que votre nom d'assembly manque" .dll ". Veuillez fournir l'extrait de code." - A partir de la piste de pile, je pense que toutes les traces de pile de code ne sont pas dans mon propre code, il semble que c'est du propre code .Net? Qu'est-ce que .dll dois-je fournir et quel extrait de code avez-vous besoin pour analyser ce problème? – George2

Répondre

15

Le BadImageFormatException se pose lors de le fichier d'assemblage peut être trouvé, mais n'est pas un assembly correct, ou est corrompu. Par exemple, si vous avez FTP les fichiers sur le serveur et le transfert a été interrompu, le fichier DLL peut avoir été transféré que partiellement, provoquant cette erreur. Sur 64 bits par rapport à 32 bits: lorsque vous utilisez P/Invoke ou COM Interop, some blogger reports que le passage à une compilation cible spécifique peut aider votre situation. Cela signifie: si vous interfacer avec une DLL 32 bits, assurez-vous de compiler pour x86, en l'obligeant à s'exécuter sous WoW32, sinon vous recevrez cette exception. Cette correction est confirmed here et here.

Vous pouvez également configurer votre système entier par défaut 32 bits en exécutant la commande:

 
Ldr64.exe setwow 

à partir du répertoire Framework64.

Une solution courante consiste à reconstruire le fichier ou à au moins le re-publier.

+0

Vous voulez dire test.foo.dll lui-même est corrompu ou d'autres DLL système? – George2

+1

@ George2: Je veux dire test.foo.dll est corrompu, mais voir mes nouvelles notes sur le bit 32 bits vs 64 bits, ce qui peut sembler contre-intuitif. – Abel

+0

Merci pour votre mise à jour @Abel, voulez-vous dire que je devrais reconstruire la solution à la plate-forme 64 bits (depuis mon Windows Server 2008 est 64 bits)? – George2

2

Votre site Web utilise-t-il DefaultAppPool? Si oui, essayez de régler le pool d'applications de votre site Web pour ASP .Net v4.0, Ou si vous utilisez un pool d'applications sur mesure, vérifiez qu'il est en cours d'exécution NET Framework 4.0

+0

J'utilise un nouveau pool d'applications. Je l'ai mis à utiliser .Net 4.0 Framework déjà et en utilisant le mode intégré. Des idées? – George2

+0

Ce problème peut-il être dû à l'inactivation de Windows Server 2008 (je n'ai pas encore entré de numéro de licence)? – George2

+1

Avec quelle plate-forme vous construisez votre solution? Un processeur? x86? Je ne pense pas que ce soit un problème d'activation. Utilisez-vous des tiers? – sagie

6

Je viens de recevoir ce lors du déploiement de 32 DLLs bits sur un serveur exécutant 64 bits IIS 7.

Pour résoudre ce problème, je devais régler « Activer les applications 32 bits » à vrai dans les paramètres avancés de ma demande bassin.

+0

C'était pour moi, merci +1 – Lee

Questions connexes