6

我们这里有一个应用程序,它使用 postsharp 将某些方法包装在从 MethodInterceptionAspect 派生的事务方面中。我们使用 NHibernate 2.0 作为应用程序的 ORM。此代码块中存在故障,

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

这会导致以下错误:System.BadImageFormatException:尝试加载格式不正确的程序。(来自 HRESULT 的异常:0x8007000B)这似乎只发生在调用保存而不是删除或获取调用的情况下。

我想知道是否有人遇到过类似的事情?

4

3 回答 3

1

是的,我遇到过这种情况。通常是 64/32 位问题。检查项目设置中的目标。

于 2010-01-21T01:37:25.903 回答
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 位应用程序(反之亦然。

如果这些都不起作用,请尝试此处列出的步骤。

于 2011-06-24T13:25:57.237 回答
0

这很奇怪。如果您在 PostSharp 输出上执行它,会告诉 PEVERIFY 什么?

于 2010-01-22T09:50:15.010 回答