2010-01-21 3 views
6

Abbiamo un'applicazione che utilizza postsharp per racchiudere determinati metodi all'interno di un aspetto della transazione derivato da MethodInterceptionAspect. Usiamo NHibernate 2.0 come un ORM per l'applicazione. C'è un guasto all'interno di questo blocco di codice,PostSharp 2.0 BadImageFormatException

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

che genera il seguente errore: System.BadImageFormatException: Si è tentato di caricare un programma con un formato non corretto. (Eccezione da HRESULT: 0x8007000B) Questo sembra accadere solo per le chiamate da salvare e non eliminare o ricevere chiamate.

Mi chiedevo se qualcuno avesse mai incontrato qualcosa di simile?

risposta

1

Sì, ho incontrato questo. Di solito è un problema 64/32 bit. Controlla la destinazione nelle impostazioni del progetto.

+0

target è stato impostato su qualsiasi cpu, che è x64 nel mio caso, sono abbastanza certo che non è un problema 64/32 bit poiché l'intero stack è 64 bit. – intervigil

+0

+ 1. Sono praticamente garantito che questo è un problema x64/32 bit. –

0

Questo è strano. Che cosa dice PEVERIFY se lo si esegue sull'output PostSharp?

1

Jfar ha ragione; Questa eccezione indica che si ha codice a 64 bit che chiama codice a 32 bit o viceversa.

L'ho già incontrato.

qui sono i passi che ho usato per risolvere il problema:

  1. Controllare se il sistema operativo host questo viene eseguito su è a 64 bit.
  2. Verificare (per i nostri scopi di debug) che la build sia non targeting "Qualsiasi CPU". Forza il target a 64 bit se tutte le DLL che stai utilizzando sono a 64 bit (vedi i passaggi 2 e 3), altrimenti scegli come target 32 ​​bit altrimenti.

  3. Controlla il tuo download PostSharp e assicurati che sia una DLL a 64 bit.

  4. Controlla NHibernate 2.0 e assicurati di utilizzare la versione a 64 bit.

È non può mix DLL a 32 bit e un'applicazione a 64-bit (o viceversa.

Se nessuna di queste opere, provare i passi outlined here.