J'ai un problème inhabituel lors de la levée d'une exception "Une tentative de chargement d'un programme avec un format incorrect a été effectuée"? J'ai deux sites Web identiques sur le même serveur IIS et ma configuration de build fonctionne pour l'un d'eux mais pas pour l'autre.
Mon application Web C # MVC 2 peut être déployée sur deux sites Web résidant sur le même serveur IIS 7.5 (x64). L'un est le site en direct (déployé à l'aide de la configuration de la version), le second est le site bêta (déployé à l'aide d'une nouvelle configuration bêta créée uniquement pour ce projet.) La base de code des deux projets est la même. Ils ont des configurations de construction différentes, mais les paramètres à l'intérieur des configurations sont identiques.
Le déploiement de la configuration de la version sur le site Web par défaut/my_app fonctionne parfaitement.
Le déploiement de la configuration bêta sur Beta/my_app se déploie, mais lorsque je charge le site (n'importe quelle page), j'obtiens l'exception de format incorrect.
Je ne comprends pas pourquoi le déploiement avec les mêmes paramètres de configuration fonctionnerait pour un site Web mais pas pour un autre (sur le même serveur Web). Mes machines serveur + dev sont en 64 bits et les deux sites Web ont les mêmes paramètres de pool d'applications (.NET 4, intégré).
Comment puis-je trouver/résoudre ce problème? De préférence sans avoir à avoir des paramètres de configuration différents pour chaque site. Et de préférence sans avoir à changer la configuration de la version car cela fonctionne et je ne veux pas risquer de la changer.
Les deux sites Web sont:
Default Website/my_app
Beta/my_app
Le gestionnaire de configuration pour la version a ces paramètres:
Le gestionnaire de configuration pour la version bêta a exactement les mêmes paramètres:
L'exception est:
Could not load file or Assembly 'MyApp.Domain.Model' or one of its dependencies.
An attempt was made to load a program with an incorrect format.
Stack Trace:
[BadImageFormatException: Could not load file or Assembly 'MyApp.Domain.Model' or one of its dependencies. An attempt was made to load a program with an incorrect format.]
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) +123
[ConfigurationErrorsException: Could not load file or Assembly 'MyApp.Domain.Model' or one of its dependencies. An attempt was made to load a program with an incorrect format.]
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +11479520
System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() +484
System.Web.Configuration.AssemblyInfo.get_AssemblyInternal() +79
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 'MyApp.Domain.Model' or one of its dependencies. An attempt was made to load a program with an incorrect format.]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +11612256
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +141
System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +4842149
J'ai vu qu'il y avait plusieurs questions sur SO demandant "Une tentative a été faite pour charger un programme avec un format incorrect" mais je ne pense pas que ce soit un doublon. Ceci est un situation unique avec la configuration qui fonctionne bien sur un site mais pas sur un autre en utilisant les mêmes paramètres de configuration et le même serveur Web pour les deux.
Trouvé le problème - La solution réside dans la façon dont les deux AppPools sont configurés:
La modification de BetaAppPool pour définir Activer les applications 32 bits sur VRAI a résolu ce problème.
@Rick a trouvé une solution à cette question: C # Entity Framework 4 Common Language Runtime a détecté une erreur de programme non valide?
Vous avez une DLL x86 en cours de suppression dans votre emplacement de déploiement x64.
Ne fais pas ça. Ça ne marche pas.