2010-01-21 18 views
6

Tenemos una aplicación aquí que está utilizando postsharp para ajustar ciertos métodos dentro de un aspecto de transacción derivado de MethodInterceptionAspect. Usamos NHibernate 2.0 como ORM para la aplicación. Hay un fallo dentro de este bloque de código,PostSharp 2.0 BadImageFormatException

public override void OnInvoke(MethodInterceptionArgs args) 
{ 
    using (TransactionScope transaction = CreateTransactionScope()) 
    { 
     args.Proceed(); 
     transaction.Complete(); 
    } 
} 

que da como resultado el siguiente error: System.BadImageFormatException: Se ha intentado cargar un programa con un formato incorrecto. (Excepción de HRESULT: 0x8007000B) Esto solo parece ocurrir cuando las llamadas se guardan y no se eliminan ni reciben llamadas.

Me preguntaba si alguien había encontrado algo similar alguna vez?

Respuesta

1

Sí, he encontrado esto. Por lo general, es un problema de 64/32 bits. Verifique el objetivo en la configuración de su proyecto.

+0

objetivo fue fijado a cualquier CPU, que es x64 en mi caso. Estoy bastante seguro de que no es un problema de 64/32 bits ya que toda la pila es de 64 bits. – intervigil

+0

+ 1. Virtualmente garantizo que este es un problema de x64/32 bit. –

0

Eso es extraño. ¿Qué le dice a PEVERIFY si lo ejecuta en la salida PostSharp?

1

Jfar tiene razón; Esa excepción significa que tiene código de 64 bits que llama al código de 32 bits, o viceversa.

Lo he encontrado antes también.

Estos son los pasos que he utilizado para solucionarlo:

  1. Compruebe si el sistema operativo anfitrión esto es se ejecuta en 64 bits.
  2. Verificar (para nuestros fines de depuración) que la compilación es no orientada a "Cualquier CPU". Haga que se oriente a 64 bits si todos los archivos DLL que está usando son de 64 bits (consulte los pasos 2 y 3); de lo contrario, apunte a 32 bits.

  3. Revise su descarga PostSharp y asegúrese de que sea una DLL de 64 bits.

  4. Compruebe NHibernate 2.0 y asegúrese de estar utilizando la versión de 64 bits.

Usted no puede mezcla DLL de 32 bits y una aplicación de 64 bits (o viceversa.

Si nada de esto funciona, pruebe los pasos outlined here.

Cuestiones relacionadas