XAML, BAML 和 .g.cs

Rob Relyea的blog上的一篇文章讲到了XAML的编译方式,以及XAML, BAML, .g.cs 的由来。


XAML
原来的意思是eXtensible Avalon Markup Language,现在改成了eXtensible Application Markup Language,毕竟现在XAML已经不只是运行在Avalon中,在XP上安装了WinFX的Runtime也已经可以运行了。


编译过程(foo.xaml)
1) 解析 foo.xaml (解析器:System.Xml.XmlTextReader)
2) markup 编译器调用BAMLWriter 在objrelease.目录产生foo.baml
3) markup 编译器生成一个Partial类保存到foo.g.cs文件中


Foo.baml?
BAML中的B表示Binary, BAML中标识了XAML中对象的层次和属性,在程序运行时BAML的载入速度要快很多。


Foo.g.cs?
.g的意思是”Generated”,XAML是一种描述,最终它还是将被解释成C#,每个XAML文件实际上都是定义了一个新的类,foo.g.cs包含了foo.xaml.cs以外的同一类的自动生成的代码。
.g.cs中定义了每个元素的ID属性,加载了foo.baml文件。