참 뭐랄까 근본 없는 것이란 이런 기초적인데에서 문제를 드러내지요.
그러니까... 보통 예외 메시지들이란게 대체로 별로 도움이 안되는 경우가 많잖아요?
누가 null reference 들어와서 죽은거 모른대요? 왜 null이 들어왔는지를 모르는거죠.

여튼.

이런 경험이 누적되다보면 예외 메시지는 Exception.Message만 대충 보고 다른데서 원인을 찾기 마련인데요.
가끔은 Exception.InnerException을 보고도 더 많은 정보를 얻을 수 있는 기회를 놓칠 때가 있어서 다시는 잊지 말자는 심정으로 포스팅해요.

이번 케이스는 이것.

동적으로 XAP 파일을 받아서 동적으로 어셈블리들을 로드하는데 분명히 해당 어셈블리 중 하나의 의존성이 해결되지 않아서 발생하는 문제인것까진 알겠는데 어떤 어셈블리의 문젠지를 모르겠단 말이에요. 아주 한참을 헤맸죠.

던져주는 메시지라곤 고작 "Unable to load one or more of the requested types. ..."
네, 참 도움 되네요. 로드하다 실패해놓고 로드에 실패했다니;;; 어쩌라고!

뭘 놓쳤는지 아시겠죠? 뒤에 ...으로 더 이상 읽지 않은 부분이 바로: "Retrieve the LoaderExceptions property for more information." 근데 여기에서  InnerException이 null 이라서 '더 많은 정보'가 어디에 있는지를 모르고 지나치기 일쑤란거죠.
사실은 여기에서 받은 예외의 원래 타입은 System.Reflection.ReflectionTypeLoadException이죠. 근데 그 예외를 그냥 Exception 타입으로 받아와서 ReflectionTypeLoadException이 가지고 있던 고유의 데이터는 다음과 같이 숨겨져 버린거죠.


아;; 친절하게도 무려 한글 오류씩이나;;
네, 타입 로드에 실패한 원인은 System.Windows.Controls.Data 어셈블리가 미리 로드 되지 않아서였군요.
컴파일 시점에는 드러나지 않았던 의존 관계라서 디버깅에 참 애를 먹었어요.

요즘 Prism 4 + MEF로 프로젝트 진행중인데 동적 로딩을 많이 사용해서 생각지도 못한 에러가 많아요.
그나마 비주얼 스튜디오가 아니었으면 이런 에러는 어떻게 잡나 싶을 정도로요.
어쨌든!

Don't Panic!
Posted by gongdo


티스토리 툴바