2014-01-25 4 views
9

XAML 파일의 컴파일 프로세스를 이해하고 싶습니다. 죄송합니다. 여기에이 질문을 던지 셨습니다.하지만이 프로세스를 자세히 설명하는 리소스를 찾지 못했습니다.XAML 파일 (WPF) 컴파일

저는 XAML이 .baml 파일로 컴파일된다는 것을 알고 있습니다. 그러나 .baml은 생성 된 .g.cs 파일에서 컴파일됩니까? 또는 .baml에 독립적이며 생성 된 .g.cs 파일과 원래 .xaml.cs 파일에서 생성 된 IL 코드입니다. MainWindow가 부분적인 이유를 설명합니다. XAML 선언의 어느 부분이 BAML 파일로 이동합니까? .baml 파일 로딩이 발생할 때도 알고 싶습니다 (예 : 창에 대해 이야기 할 때). 도움 주셔서 감사합니다.

+0

제목은 정말로 분명하지 않습니다. 목적을 분명히 밝히지는 않습니다. –

답변

8

아래의 참조를 기반으로 이해 한대로, XAML에 선언 된 모든 항목이 BAML로 컴파일됩니다. .g.cs.xaml.cs 파일은 일리노이로 컴파일됩니다. .xaml.cs IL은 .xaml.cs 코드 (분명히)의 코드에서 생성되고 g.cs IL은 BAML (자체에서 생성 된 IL 코드 대신 )과 상호 작용하도록 생성 된 코드를 포함합니다.

참고 자료로 blog post을 확인하십시오. 요약하면, 저자는 XAML의 컴파일이 2 단계에서 일어난 말했다 :

1 단계. 첫 번째 단계는 xamlc.exe 컴파일러를 사용하여 BAML로 XAML 파일을 컴파일하는 것입니다. 예를 들어 프로젝트에 Window1.xaml이라는 파일 이름이 있으면 컴파일러에서 Window1.baml이라는 임시 파일을 만들어 obj \ Debug 하위 폴더 (프로젝트 폴더에 있음)에 저장합니다. 동시에 우리가 선택한 언어를 사용하여 부분 클래스가 창에 생성됩니다. 예를 들어 C#을 사용하는 경우 컴파일러는 obj \ Debug 폴더에 Window1.g.cs라는 파일을 만듭니다. g는 생성 된 것을 나타냅니다. 필드 •

우리의 창에서 모든 컨트롤 :

부분 클래스는 세 가지가 포함되어 있습니다.

• BAML을 어셈블리에서로드하여 개체 트리를 만드는 코드입니다. 이것은 생성자가 Initialize Component()를 호출 할 때 발생합니다.

• 각 컨트롤 개체를 각 필드에 할당하고 모든 이벤트 처리기를 연결하는 코드입니다. BAML 파서가 명명 된 객체를 찾을 때마다 호출하는 Connect()라는 메서드에서이 문제가 발생합니다.

단계 2. XAML에서 BAML 로의 컴파일 단계가 끝나면 Visual Studio는 적절한 언어 컴파일러를 사용하여 코드와 생성 된 부분 클래스 파일을 컴파일합니다. C# 응용 프로그램의 경우이 작업을 처리하는 것은 csc.exe 컴파일러입니다. 컴파일 된 코드는 Window1.exe라는 단일 어셈블리가되며 각 창에 대한 BAML은 별도 리소스로 포함됩니다.

+0

wpf xaml을 xbf로 컴파일 할 수 있습니까? – lindexi