2010-01-21 61 views
6

我們在這裏有一個應用程序,它使用postsharp來包裝從MethodInterceptionAspect派生的事務方面內的某些方法。我們使用NHibernate 2.0作爲應用程序的ORM。有這個代碼塊內的故障,PostSharp 2.0 BadImageFormatException

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

導致以下錯誤:System.BadImageFormatException:試圖加載程序使用不正確的格式。 (從HRESULT異常:0x8007000B) 這似乎只發生在保存呼叫,而不是刪除或獲得呼叫。

我想知道是否有人遇到類似的事情嗎?

回答

1

是的,我遇到過這個問題。通常它是一個64/32位的問題。檢查項目設置中的目標。

+0

目標設定爲任何cpu,這在我的情況下是x64。我相當肯定它不是64/32位的問題,因爲整個堆棧是64位。 – intervigil 2010-01-21 02:49:57

+0

+ 1.我實際上保證這是一個x64/32位問題。 – 2012-03-02 15:24:50

0

這很奇怪。 如果您在PostSharp輸出上執行它,告訴PEVERIFY?

1

Jfar是對的;這個例外意味着你有64位代碼調用32位代碼,反之亦然。

我以前也遇到過它。

下面是我用來解決這個問題的步驟:

  1. 檢查,這是上運行主機操作系統是64位。
  2. 驗證(針對我們的調試目的),構建目標是「Any-CPU」的版本是而不是。如果您使用的所有DLL都是64位(請參閱步驟#2和#3),則強制它將目標設置爲64位,否則則以32位爲目標。

  3. 檢查您的PostSharp下載並確保它是一個64位DLL。

  4. 檢查NHibernate 2.0,並確保您使用的是64位版本。

不能混合32位DLL和64位應用程序(或反之亦然。

如果沒有這樣的作品,嘗試步驟outlined here