Asp.net mvc PostSharp 2.0 BadImageFormatException

Asp.net mvc PostSharp 2.0 BadImageFormatException,asp.net-mvc,postsharp,Asp.net Mvc,Postsharp,我们这里有一个应用程序,它使用postsharp将某些方法包装在从MethodInterceptionSpect派生的事务方面中。我们使用NHibernate2.0作为应用程序的ORM。这段代码中出现故障 public override void OnInvoke(MethodInterceptionArgs args) { using (TransactionScope transaction = CreateTransactionScope()) { args

我们这里有一个应用程序,它使用postsharp将某些方法包装在从MethodInterceptionSpect派生的事务方面中。我们使用NHibernate2.0作为应用程序的ORM。这段代码中出现故障

public override void OnInvoke(MethodInterceptionArgs args)
{
    using (TransactionScope transaction = CreateTransactionScope())
    {
        args.Proceed();
        transaction.Complete();
    }
}
这将导致以下错误:System.BadImageFormatException:试图加载格式不正确的程序。(HRESULT的异常:0x8007000B) 这种情况似乎只发生在要保存的呼叫上,而不是删除或获取呼叫


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

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

这很奇怪。 如果您在PostSharp输出上执行它,PEVERIFY会得到什么信息?

是正确的;该异常意味着您要么有64位代码调用32位代码,要么反之亦然

我以前也遇到过

以下是我用来修复它的步骤:

  • 检查运行此操作的主机操作系统是否为64位
  • 验证(出于调试目的)构建是否以“任何CPU”为目标。如果您使用的所有DLL都是64位的(请参见步骤2和步骤3),则强制它以64位为目标,否则以32位为目标

  • 检查您的PostSharp下载并确保它是64位DLL

  • 检查NHibernate2.0,确保您使用的是64位版本
  • 不能将32位DLL和64位应用程序混合使用(反之亦然)


    如果这些都不起作用,请尝试以下步骤。

    目标被设置为任何cpu,在我的情况下是x64。我相当确定这不是64/32位问题,因为整个堆栈是64位的。+1。我几乎可以保证这是x64/32位问题。