6

Postsharp を使用して、MethodInterceptionAspect から派生したトランザクション アスペクト内に特定のメソッドをラップするアプリケーションがあります。アプリケーションの ORM として NHibernate 2.0 を使用します。このコード ブロック内にエラーがあります。

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

その結果、次のエラーが発生します: System.BadImageFormatException: 不正な形式のプログラムを読み込もうとしました。(HRESULT からの例外: 0x8007000B) これは、呼び出しを保存する場合にのみ発生し、呼び出しを削除または取得しないようです。

誰かがこれまでに似たようなものに遭遇したかどうか疑問に思っていましたか?

4

3 に答える 3

1

Jfarは正しいです。この例外は、32ビットコードを呼び出す64ビットコードがあるか、またはその逆であることを意味します。

私も以前に遭遇したことがあります。

これを修正するために使用した手順は次のとおりです。

  1. これが実行されているホストOSが64ビットであるかどうかを確認します。
  2. ビルドが「Any-CPU」をターゲットにしていないことを(デバッグ目的で)確認します。使用しているすべてのDLLが64ビットの場合は64ビットをターゲットにし(手順2と3を参照)、それ以外の場合は32ビットをターゲットにします。

  3. PostSharpのダウンロードをチェックして、64ビットDLLであることを確認してください。

  4. NHibernate 2.0をチェックし、64ビットバージョンを使用していることを確認してください。

32ビットDLLと64ビットアプリケーションを混在させることはできません(またはその逆)。

それでもうまくいかない場合は、ここで概説されている手順を試してください。

于 2011-06-24T13:25:57.237 に答える
1

はい、私はこれに遭遇しました。通常は 64/32 ビットの問題です。プロジェクト設定でターゲットを確認してください。

于 2010-01-21T01:37:25.903 に答える
0

それは変です。PostSharp出力で実行した場合、PEVERIFYは何を示しますか?

于 2010-01-22T09:50:15.010 に答える