2010-01-21 60 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