PostSharp 2.0 BadImageFormatException - PullRequest
       18

PostSharp 2.0 BadImageFormatException

6 голосов
/ 21 января 2010

У нас есть приложение, которое использует postsharp для обертывания определенных методов в аспект транзакции, полученный из MethodInterceptionAspect. Мы используем NHibernate 2.0 в качестве ORM для приложения. В этом блоке кода произошла ошибка,

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

, что приводит к следующей ошибке: System.BadImageFormatException: была предпринята попытка загрузить программу с неверным форматом. (Исключение из HRESULT: 0x8007000B) Похоже, это происходит только для вызовов, чтобы сохранить, а не удалять или принимать вызовы.

Мне было интересно, сталкивался ли кто-нибудь с чем-либо подобным?

Ответы [ 3 ]

1 голос
/ 24 июня 2011

Jfar верно; Это исключение означает, что у вас есть либо 64-битный код, вызывающий 32-битный код, либо наоборот.

Я сталкивался с этим и раньше.

Вот шаги, которые я использовал, чтобы исправить это:

  1. Проверьте, является ли ОС хоста, на которой она запущена, 64-битной.
  2. Убедитесь (для наших целей отладки), что сборка не нацелена на "Any-CPU". Принудительно настроить его на 64-битный режим, если все используемые вами библиотеки являются 64-битными (см. Шаги № 2 и № 3), в противном случае - 32-битный.

  3. Проверьте загрузку PostSharp и убедитесь, что это 64-битная DLL.

  4. Проверьте NHibernate 2.0 и убедитесь, что вы используете 64-разрядную версию.

Вы не можете смешивать 32-разрядные библиотеки DLL и 64-разрядное приложение (или наоборот.

Если ничего из этого не работает, попробуйте шаги , изложенные здесь .

1 голос
/ 21 января 2010

Да, я сталкивался с этим. Обычно это проблема 64/32 бит. Проверьте цель в настройках вашего проекта.

0 голосов
/ 22 января 2010

Странно. Что говорит PEVERIFY, если вы выполните его на выходе PostSharp?

...