PostSharp вызывает BadImageException при применении к универсальным методам - ​​ошибки при запуске peverify.exe - PullRequest
0 голосов
/ 02 июля 2010

Я только что обновил проект с VS2008 / .NET 3.5 / PostSharp 1.5 до VS2010 / .NET4.0 / PostSharp 2.0.

Теперь, когда я запускаю модульные тесты для системы, я получаю множество исключений вФорма:

System.BadImageFormatException: была предпринята попытка загрузить программу с неверным форматом.(Исключение из HRESULT: 0x8007000B) в COMPANY.Data.NHibernate.BaseRepository.c__Binding`1.Invoke (Объект & экземпляр, Аргументы аргументы, Объект aspectArgs) в PostSharp.Aspects.Internals.MethodInterceptionArgsImpl.Proceed () в COMPANY.Aop.ttransaction.OnInvoke (контекст MethodInterceptionArgs) в C: \ COMPANY \ Code \ COMPANY-NET4.0 \ Core \ Aop \ TransactionAspectAttribute.cs: строка 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_saving_a_canonical_term. <. Ctor> b__5 () в C: \ COMPANY \ Code \ COMPANY-NET4.0 \ UnitTests \ DataAccess \ NHibernate \ CanonicalTermRepositorySpecs.cs: строка 29 в Machine.Specifications.Utility.RandomExtensionMethods.InvokeIfNotNull (потому что потому что) в Machine.Specifications.Model.Context.EstablishContext ()

* 1006 КогдаЗапустите peverify.exe на сборке, я вижу сотни ошибок в следующей форме.Кажется, всегда возникают проблемы с универсальными методами:

[IL]: ошибка: [C: \ COMPANY \ Code \ COMPANY-NET4.0 \ Core \ bin \ Debug \ COMPANY.Core.dll: COMPANY.Data.NHibernate.ActivationRepository + c__Binding :: Invoke] [смещение 0x0000008D] [найдено ref 'PostSharp.Aspects.Internals.MethodBinding'] [ожидаемый ref 'PostSharp.Aspects.Internals.MethodBinding`1 [COMPANY.Models.Activation]'] Ожидаетсявведите в стек.

[IL]: ошибка: [C: \ COMPANY \ Code \ COMPANY-NET4.0 \ Core \ bin \ Debug \ COMPANY.Core.dll: COMPANY.Data.NHibernate.ActivationRepository+ c__Binding :: Invoke] [смещение 0x00000056] [найдено ref 'PostSharp.Aspects.Internals.MethodBinding`1 [COMPANY.Models.Activation]'] [ожидаемый ref 'PostSharp.Aspects.Internals.MethodBinding'] Неожиданный тип в стеке.

Я использую последнюю версию PostSharp 2.0 RC.

Ответы [ 2 ]

1 голос
/ 02 июля 2010

Проблема решается здесь: http://www.sharpcrafters.com/forum/Topic4896-19-1.aspx

0 голосов
/ 02 июля 2010

«System.BadImageFormatException» обычно указывает на 64-битную / 32-битную проблему.

Если вы скомпилируете свой код для «Любого ЦП» и запустите его на 64-битном процессоре, он будет скомпилирован в JIT до 64-битной. Если затем он вызывает какой-либо код (например, в неуправляемой dll), который является 32-разрядным, вы получите это исключение при попытке перехода с 64-разрядного на 32-разрядный код.

Если вы работаете в 64-битной ОС, возможно, что-то в вашем обновлении заставило вашу программу получить смесь 32-битного и 64-битного кода. Если вы работаете в 32-битной ОС, тогда проблема не может быть, однако, в этом случае это может указывать на испорченный бинарный файл.

Если это 32/64, то вы можете сделать следующее: - Убедитесь, что все используемые вами библиотеки имеют ту же разрядность, что и ваше приложение, или - Если вы не можете заменить некоторые 32-битные библиотеки на 64-битные версии, попробуйте скомпилировать ваше приложение как «x86», а не «Any CPU». Это заставит его скомпилироваться в 32-битный код даже на 64-битном ПК, что будет означать, что он должен работать под WoW64 как 32-битное приложение, но будет совместимо с его 32-битными библиотеками.

...