2010-07-02 1 views
0

방금 ​​VS2008/.NET 3.5/PostSharp 1.5에서 VS2010/.NET4.0/PostSharp 2.0으로 프로젝트를 업그레이드했습니다.PostSharp가 제네릭 메서드에 적용될 때 BadImageException을 발생시킵니다. peverify.exe를 실행할 때 오류가 발생합니다.

System.BadImageFormatException : 시스템의 단위 테스트를 실행할 때

지금, 나는의 형태로 hundereds 예외를 얻을 시도가 잘못된 형식의 프로그램을로드하려고했습니다. (HRESULT에서 예외 : 0x8007000B) COMPANY.Data.NHibernate.BaseRepository.c__Binding`1.Invoke에서 회사에서() 를 PostSharp.Aspects.Internals.MethodInterceptionArgsImpl.Proceed에서 을 (객체 & 예, 인수 인수, aspectArgs 개체). C : \ COMPANY \ Code \ COMPANY-NET4.0 \ Core \ Aop \ TransactionAspectAttribute.cs의 Aop.TransactionAspectAttribute.OnInvoke (MethodInterceptionArgs 컨텍스트) : COMPANY.Data.NHibernate.BaseRepository.Save의 68 줄 (T scoreBigModel) in C : \ COMPANY \ Code \ COMPANY-NET4.0 \ Core \ DataAccess \ NHibernate \ BaseRepository.cs : COMPANY.UnitTests.DataAccess.NHibernate.when_saving_a_canonical_term에서 줄 102 줄. .ctor> b__5() C : \ COMPANY \ Code \ COMPANY-NET4.0 \ UnitTests \ DataAccess \ NHibernate \ CanonicalTermRepositorySpecs.cs : 줄 29 at Machine.Specifications.Utility.RandomExtensionMethods.InvokeIfNotNull (때문에) at Machine.Specifications.Model.Context.EstablishContext()

어셈블리에서 peverify.exe를 실행하면 다음과 같은 형태로 수백 개의 오류가 표시됩니다. 항상 일반적인 방법의 문제 인 것 같습니다.

[IL] : 오류 : [C : \ COMPANY \ Code \ COMPANY-NET4.0 \ Core \ bin \ Debug \ COMPANY.Core.dll : COMPANY.Data.NHibernate .ActivationRepository + c__Binding :: Invoke] [offset 0x0000008D] [찾은 'PostSharp.Aspects.Internals.MethodBinding'] [예상 심판 'PostSharp.Aspects.Internals.MethodBinding`1 [COMPANY.Models.Activation]'] 예기치 않은 유형 켜짐 스택

[IL] : 오류 : [C : \ COMPANY \ 코드 \ COMPANY-NET4.0 \ Core \ bin \ Debug \ COMPANY.Core.dll : COMPANY.Data.NHibernate.ActivationRepository + c__Binding :: Invoke] offset 0x00000056] [찾은 'PostSharp.Aspects.Internals.MethodBinding`1 [COMPANY.Models.Activation]'] [예상 ref 'PostSharp.Aspects.Internals.MethodBinding'] 스택에 예기치 않은 유형이 있습니다.

저는 최신 릴리스의 PostSharp 2.0 RC를 실행하고 있습니다.

+0

당신은이 제품에 대한 베타 테스터이야, 당신은 공급 업체에 의견을 보내해야합니다. 시스템 요구 사항은 VS2010 RC를 요구합니다. VS2010 RTM으로 작동하지 마십시오. –

+0

VS2010 RTM이 지원됩니다. RC는 지원되지 않습니다. 이것은 웹 사이트의 버그입니다. 나는 그것을 바로 잡을 것이다. –

답변

0

"System.BadImageFormatException"은 일반적으로 64 비트/32 비트 문제를 나타냅니다.

"모든 CPU"에 대한 코드를 컴파일하고 64 비트 프로세서에서 실행하면 JIT가 64 비트로 컴파일됩니다. 그런 다음 32 비트 인 모든 코드 (예 : 관리되지 않는 dll)를 호출하면 64 비트에서 32 비트 코드로 건너 뛸 때이 예외가 발생합니다.

64 비트 OS에서 실행중인 경우 업그레이드시 프로그램에서 32 비트 및 64 비트 코드가 혼합되어 발생할 수 있습니다. 32 비트 OS에서 실행중인 경우 문제가 될 수는 없지만이 경우에는 손상된 바이너리가 표시 될 수 있습니다.

32/64 인 경우 다음을 수행 할 수 있습니다. - 사용하는 모든 DLL이 앱과 동일한 비트 값인지 확인하십시오. - 일부 32 비트를 대체 할 수없는 경우 dll을 64 비트 버전으로 컴파일하려면 "Any CPU"가 아닌 "x86"으로 응용 프로그램을 컴파일 해보십시오. 이렇게하면 64 비트 PC에서도 32 비트 코드로 컴파일되므로 32 비트 응용 프로그램으로 WoW64에서 실행해야하지만 32 비트 DLL과 호환됩니다.

+0

x86으로 컴파일하려고 시도했지만 런타임 및 peverify.exe 오류가 변경되지 않았습니다. PostSharp가 어셈블리를 다시 쓰는 방법과 관련하여 특정 오류가있는 것처럼 보입니다. 개체를 밀고 나올 때 포인터가 한 번에 일반으로 참조되지만 다른 시점에는 일반이 아닙니다. – Mike

+0

@Mike : 나는 두려워하는 것보다 많은 도움이되지 않을 수도 있습니다. 이전의 PostSharp로 롤백을 시도해 툴체인의 어느 부분이 문제를 일으키는 지 파악할 수 있는지 확인할 수 있습니다. (나는 첫 번째 인스턴스에서 VS/.net을 의심하는 경향이 적다) –