2010-01-21 4 views
6

Nous avons une application ici qui utilise postsharp pour emballer certaines méthodes dans un aspect de transaction dérivé de MethodInterceptionAspect. Nous utilisons NHibernate 2.0 comme ORM pour l'application. Il y a un échec dans ce bloc de code,PostSharp 2.0 BadImageFormatException

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

qui entraîne l'erreur suivante: System.BadImageFormatException: Une tentative a été faite pour charger un programme avec un format incorrect. (Exception de HRESULT: 0x8007000B) Cela semble seulement se produire pour les appels à enregistrer, et ne pas supprimer ou recevoir des appels.

Je me demandais si quelqu'un avait déjà rencontré quelque chose de similaire?

Répondre

1

Oui, j'ai rencontré cela. Habituellement c'est un problème de 64/32 bits. Vérifiez la cible dans les paramètres de votre projet.

+0

objectif a été fixé à tout cpu, qui est x64 dans mon cas.Je suis à peu près certain que ce n'est pas un problème de 64/32 bits puisque la pile entière est en 64. – intervigil

+0

+ 1. Je vous garantis quasiment un problème de x64/32 bits. –

0

C'est bizarre. Qu'est-ce qui indique à PEVERIFY si vous l'exécutez sur une sortie PostSharp?

1

Jfar est exact; Cette exception signifie que vous avez un code 32 bits appelant le code 64 bits, ou vice versa.

Je l'ai déjà rencontré avant.

Voici les étapes que je l'habitude de le corriger:

  1. Vérifiez si le système d'exploitation hôte est exécuté sur cette 64 bits.
  2. Vérifiez (à des fins de débogage) que la construction est et non en ciblant "Any-CPU". Forcer à 64 bits cible si toutes les DLL que vous utilisez sont 64 bits (voir les étapes 2 et 3), autrement, ciblez 32 bits dans le cas contraire.

  3. Vérifiez votre téléchargement PostSharp et assurez-vous qu'il s'agit d'une DLL 64 bits.

  4. Vérifiez NHibernate 2.0 et assurez-vous que vous utilisez la version 64 bits.

Vous ne peut pas mix DLL 32 bits et une application 64 bits (ou vice-versa.

Si rien de tout cela fonctionne, essayez les étapes outlined here.

Questions connexes