代码之家  ›  专栏  ›  技术社区  ›  Mike

PostSharp在应用于泛型方法时导致BadImageException-运行peverify.exe时出错

  •  0
  • Mike  · 技术社区  · 14 年前

    我刚刚将一个项目从VS2008/.net3.5/PostSharp 1.5升级到VS2010/.NET4.0/PostSharp 2.0。

    现在,在为系统运行单元测试时,我得到了成百上千个异常,其形式如下:

    System.BadImageFormatException:试图加载格式不正确的程序(HRESULT异常:0x8007000B) 在COMPANY.Data.NHibernate.BaseRepository.c\u Binding`1.Invoke(Object&实例、参数、对象aspectArgs) 在PostSharp.Aspects.Internals.methodInterceptOnArgsimpl.procedue() 在C:\COMPANY\Code\COMPANY-NET4.0\Core\Aop\transactionspecttribute.cs中的COMPANY.Aop.transactionspecttribute.OnInvoke(methodinterceptonargs context)中:第68行 在COMPANY.Data.NHibernate.BaseRepository.Save[T](T scoreBigModel)中的C:\COMPANY\Code\COMPANY-NET4.0\Core\DataAccess\NHibernate\BaseRepository.cs:第102行 在COMPANY.UnitTests.DataAccess.NHibernate.when\u saving\u canonical\u term.<。ctor>C:\COMPANY\Code\COMPANY-NET4.0\UnitTests\DataAccess\NHibernate\CanonicalTermRepositorySpecs.cs中的b\uu 5():第29行 位于Machine.Specifications.Utility.RandomExtensionMethods.InvokeIfNotNull(因为) at Machine.Specifications.Model.Context.estightContext()

    当我在程序集上运行peverify.exe时,我看到以下形式的数百个错误。泛型方法似乎总是有问题:

    [IL]:错误:[C:\COMPANY\Code\COMPANY-NET4.0\Core\bin\Debug\COMPANY.Core.dll:COMPANY.Data.NHibernate.ActivationRepository+C\uu Binding::Invoke][offset 0x00000056][found ref'PostSharp.Aspects.Internals.MethodBinding'1[COMPANY.Models.Activation]'][expected ref'PostSharp.Aspects.Internals.MethodBinding']堆栈上的意外类型。

    我正在运行postsharp2.0rc的最新版本。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Gael Fraiteur    14 年前
        2
  •  0
  •   Jason Williams    14 年前

    “System.BadImageFormatException”通常表示64位/32位问题。

    如果您为“任何CPU”编译代码并在64位处理器上运行,它将被JIT编译为64位。如果它然后调用任何32位的代码(例如,在非托管dll中),那么当它尝试从64位代码跳转到32位代码时,将出现此异常。

    如果您运行的是64位操作系统,那么升级中的某些内容可能会导致您的程序混合使用32位和64位代码。如果您运行的是32位操作系统,那么这就不是问题所在,在这种情况下,它可能表示二进制文件已损坏。

    如果是32/64,则可以执行以下操作: