2010-01-21 12 views
6

Mamy tutaj aplikację, która używa funkcji postsharp do zawijania pewnych metod w aspekcie transakcji uzyskanym z MethodInterceptionAspect. Używamy NHibernate 2.0 jako ORM dla aplikacji. Jest awaria w tym bloku kodu,PostSharp 2.0 BadImageFormatException

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

że wyniki w następujący błąd: System.BadImageFormatException: Próbowano załadować program z nieprawidłowym formacie. (Wyjątek od HRESULT: 0x8007000B) To zdaje się zdarzać tylko w przypadku połączeń, które można zapisać, a nie usuwać lub odbierać połączenia.

Zastanawiałem się, czy ktoś napotkał coś podobnego kiedykolwiek?

Odpowiedz

1

Tak, napotkałem to. Zwykle jest to problem 64/32 bitowy. Sprawdź cel w ustawieniach projektu.

+0

docelowa została ustalona na dowolny cpu, co w moim przypadku jest x 64. Jestem prawie pewien, że nie jest to problem 64/32 bitowy, ponieważ cały stos jest 64-bitowy. – intervigil

+0

+ 1. Gwarantuję praktycznie, że jest to problem x64/32-bitowy. –

0

To dziwne. Co oznacza PEVERIFY, jeśli uruchomisz go na wyjściu PostSharp?

1

Jfar ma rację; Ten wyjątek oznacza, że ​​masz 64-bitowy kod wywołujący kod 32-bitowy lub na odwrót.

Napotkałem też wcześniej.

Oto kroki użyłem go naprawić:

  1. Sprawdź, czy system operacyjny hosta ten prowadzony jest na to 64-bitowy.
  2. Sprawdź (dla naszych celów debugowania), czy kompilacja ma wartość , a nie przy użyciu opcji "Dowolny procesor". Wymuś na 64 bitach, jeśli wszystkie biblioteki DLL, których używasz, są 64-bitowe (patrz kroki # 2 i # 3), w przeciwnym razie celuj w 32-bitowy sposób w inny sposób.

  3. Sprawdź swoje pobieranie PostSharp i upewnij się, że jest to 64-bitowa biblioteka DLL.

  4. Sprawdź NHibernate 2.0 i upewnij się, że używasz wersji 64-bitowej.

Ty nie może mix 32-bitowych bibliotek DLL i aplikacji 64-bitowych (lub vice versa.

Jeśli nic z tego działa, spróbuj kroki outlined here.

Powiązane problemy