2012-10-22 7 views
2

내 연기 테스트 중 일부에서 내 어셈블리의 opcode를 구문 분석하기 위해 Mono Cecil을 사용하고 있습니다. 그런 다음 코드 품질 등을 검증하기위한 몇 가지 작업을 수행합니다. 그러나 실제로 수행 할 수있는 작업이 많지 않으므로 생성 된 코드는 신경 쓰지 않습니다. 따라서 InitializeComponent 메서드를 제외합니다. 이 WinForms 잘 작동하지만 xaml 작동하지 않습니다. 즉, xaml의 지침 (즉, 구독중인 이벤트)을 여전히 처리하고 있습니다. 나는 xaml이 "IL"이 아닌 baml로 "컴파일"되었다는 것을 알고 있지만, Mono Cecil은 여전히 ​​baml에서 OpCode를 얻을 수 있습니다. xaml에 해당하는 InitializeComponent

나는 here 및 XAML에서 InitializeComponentApplication.LoadComponent 메소드를 호출 here 읽고, 그래서 나뿐만 아니라 것을 제외하려고하지만 난 여전히 XAML 지침을 처리했다. 특히 이벤트 핸들러 구독을 확인하고 있습니다.

내 질문

:InitializeComponent 또는 LoadComponent 이외의 XAML을 컴파일 할 때 호출되는 다른 "후드"방법이 있습니까? 즉, 코드 숨김 (xaml.cs)과 xaml의 차이점을 어떻게 구분할 수 있습니까?

답변

1

MSDN을 통해 조사한 결과, this 작은 보석을 발견했습니다.

분명히 IComponentConnector는 InitializeComponent와 Connect (이벤트 구독을 처리하는)를 모두 처리합니다. WPF와 Winforms에 대해 약간의 교훈이 있습니다. 이벤트는 InitializeComponent에서 설정됩니다.

그래서, 배제하는 방법은 다음과 같습니다

System.Windows.Markup.IComponentConnector.Connect();