2010-07-14 2 views
5

우리 소프트웨어를 vs2008/.net 3.5에서 vs2010/.net 4.0으로 업그레이드했습니다. 모든 타사 라이브러리 (가장 관련성이 높은 : nhibernate 2.1.2 또는 3.0.0, nunit 2.5.2)는 여전히 vs2008을 사용하여 컴파일됩니다. 우리 소프트웨어의 디버그 빌드를위한 단위 테스트를 실행하면 모든 것이 잘 동작합니다. 릴리스 빌드에서 nunit은 228/33 테스트에서 예외를보고합니다. System.InvalidProgramException : Common Language Runtime detected an invalid program. nunit-console 및 Resharper 5.0 테스트 러너 모두 동일한 테스트에서 항상 발생합니다. Resharper "debug unit-tests"명령을 사용하여 실행하면 모든 테스트가 통과됩니다. 테스트를 개별적으로 실행하거나 일괄 적으로 실행하는지 여부는 아무런 차이가 없습니다. 예외는 항상 nhibernate 쿼리 호출 근처에서 발생하지만 릴리스 빌드 스택 추적이 다소 희소하기 때문에 확실하게 말할 수는 없습니다. 그것은 nhibernate 바이트 코드 생성기에 의존하지 않는다. castle과 linfu에 대해서도 같은 예외가 나타난다. 누구든지 이것을 디버깅하는 방법을 알고 있습니까?릴리스 빌드에서 nunit : "공용 언어 런타임에서 잘못된 프로그램을 감지했습니다."

편집 : Spring.NET을 제거해도이 문제가 발생하지 않았습니다.

편집 : 전체 대신 PDB에 릴리스 구성 디버그 출력을 전환하는 경우에만최적화 코드 체크 박스를 해제 예외가 사라집니다. 두 설정 모두 필요합니다. 하나만 변경하면 버그가 남아 있습니다. 그러나 하나만 변경하면 다른 테스트 세트가 실패합니다. 모든 클래스 라이브러리는 모든 CPU에 대해 컴파일됩니다.

+0

프로젝트의 릴리스 및 디버그 구성이 다른지 확인할 수 있습니까? 어떤 경우에 누군가가 X를 디버그 구성에 추가하는 것을 보았습니다. 릴리스 구성을 오래 전에 남겨 두었습니다. – Gishu

+0

@ Gishu : 디버그 출력의 차이를 추적하고 코드 설정을 최적화 할 수있었습니다. 다른 설정은없는 것 같습니다. 이 문제에 영향을 미칩니다. –

+0

흠 .. 확실한 방향이 없습니다. 몇 가지 간단한 검색에서 제 3 자 dll 호출과 관련이있는 것 같습니다. http://bit.ly/g3iwnK stacktrace를 가져 와서 오른쪽 MS 포럼에 게시 해보십시오. 틈새 영역 인 것 같습니다. (정확히 SO가 아님) – Gishu

답변

0

이것은 아마도 어리석은 질문입니다. 모든 어셈블리가 동일한 아키텍처 (x86/x64)로 컴파일되어 있습니까? 나는 이걸 한동안 돌려 봤어.

+0

모든 어셈블리가 * 모든 CPU *에서 컴파일 될 때 작동해야합니까? 목표를 명시 적으로 지정해야합니까? –

+0

모든 CPU가 작동해야합니다. JIT 컴파일러는 실행시 적절한 아키텍처로 컴파일합니다. – Amy

0

"NET Framework 4.0 Client Profile"을 선택했을 때 비슷한 점이있었습니다. 대상 프레임 워크 "NET 프레임 워크 4.0"로 변경하려고

+0

CP가 아니라 이미 전체 4.0 프로필입니다. –

0

내 응용 프로그램은 릴리스 구성에 동일한 제외하고 디버그하지만 사고로 실행됩니다. 그 이유는 값이 반환 된 조건부 "DEBUG"속성을 가진 메소드를 가지고 있기 때문입니다 ...

물론, 릴리스 구성에서 조건부 "DEBUG"속성을 가진 모든 메소드는 반환되지 않는 스텁으로 변경됩니다 값. 따라서 IDE는 코드 분석을 통해 유형이 훌륭하다고 생각할 수 있습니다. 경고는 표시되지 않지만 컴파일 된 응용 프로그램에는 반환 유형 오류가 있습니다!

그냥이 문제가있는 벽에 머리를 두드리는 사람들을 위해 추가 할 것이라고 생각했습니다.

관련 문제