2011-07-18 10 views
38

Tengo un problema inusual lanzando una excepción "¿Se intentó cargar un programa con un formato incorrecto" error? Tengo dos sitios web idénticos en el mismo servidor IIS y mi configuración de compilación funciona para uno de ellos pero no para el otro.Reparación de IIS 7.5 ¿Se intentó cargar un programa con un problema de formato incorrecto?

Mi aplicación web C# MVC 2 se puede implementar en dos sitios web que residen en el mismo servidor web IIS 7.5 (x64). Uno es el sitio en vivo (implementado usando la configuración de Release), el segundo es el sitio beta (implementado usando una nueva configuración Beta creada solo para este proyecto). La base de código para ambos proyectos es la misma. Tienen diferentes configuraciones de compilación, pero las configuraciones dentro de las configuraciones son idénticas.

Despliegue de la configuración de lanzamiento al sitio web predeterminado/my_app funciona perfectamente.

Implementando la configuración beta en implementaciones Beta/my_app, pero cuando cargo el sitio (cualquier página) recibo la excepción de formato incorrecto.

No entiendo por qué implementar con la misma configuración de configuración funcionaría para un sitio web pero no para otro (en el mismo servidor web). Mis máquinas servidor + desarrollador son de 64 bits, y ambos sitios web tienen la misma configuración de grupo de aplicaciones (.NET 4, integrado).

¿Cómo puedo encontrar/corregir este problema? Preferiblemente sin tener que tener configuraciones de configuración diferentes para cada sitio. Y preferiblemente sin tener que cambiar la configuración de lanzamiento, ya que está funcionando y no quiero arriesgarme a cambiarla.

Los dos sitios web son:

Default Website/my_app 
Beta/my_app 

El administrador de configuración para la liberación tiene estos ajustes:

release build configuration

El administrador de configuración para la beta tiene exactamente las mismas opciones:

beta build configuration

La excepción es:

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 

he visto que hay varias preguntas sobre cómo hacer lo que alrededor de "Se ha intentado cargar un programa con un formato incorrecto", pero no creo que esto sea un duplicado. Esta es una situación única con la configuración funcionando bien en un sitio, pero no en otro con la misma configuración y el mismo servidor web para ambos.

+0

lo que sucede cuando se ejecuta este con Cassini? – Illuminati

Respuesta

71

encontrado el problema - La solución está en la forma en que los dos AppPools se configuran:

  • sitio Web predeterminado/my_app está utilizando DefaultAppPool donde Habilitar aplicaciones de 32 bits es TRUE
  • Beta/my_app -> BetaAppPool está utilizando Habilitar aplicaciones de 32 bits es FALSO

Cambiar BetaAppPool para establecer Habilitar las aplicaciones de 32 bits en TRUE ha solucionado este problema.

solución fue encontrada por @Rick sobre esta cuestión: C# Entity Framework 4 Common Language Runtime detected an invalid program error?

+0

Solo para agregar a esta respuesta: también fui a través de la aplicación web y me aseguré de que pudiera ejecutarse en 64 bits, y luego establecí Habilitar aplicaciones de 32 bits en falso en ambos AppPools: funciona y el rendimiento es mejor también –

+0

Gracias ¡tú! Estaba viendo http://blogs.msdn.com/b/sayanghosh/archive/2007/04/21/solution-to-could-not-load-file-or-assembly-or-one-of-its- dependencies-access-is-denied.aspx pero resultó que era solo esta configuración ... ¡gracias! – juFo

3

Tiene una dll x86 que se cae en su ubicación de despliegue x64.

No hagas eso. No funciona

+0

entonces, ¿por qué funciona para mi configuración de compilación de lanzamiento que se implementa en el mismo servidor x64 windows 2008? –

+0

No sé qué hiciste con tus configuraciones, pero si pasas por los binarios, verás que logras colocar allí el binario equivocado. – Joshua

+0

@Joshua ¿Cómo puedo encontrar dónde está la 'ubicación de despliegue x64'? – Lijo

Cuestiones relacionadas