我想了解XAML文件的编译过程.很抱歉在这里提出这个问题,但我真的没有找到任何资源深入解释这个过程.
我知道XAML被编译成.baml文件.但是:.baml是从生成的.g.cs文件编译的吗?或者.baml是独立的,是从生成的.g.cs和原始的.xaml.cs文件生成的IL代码 - 这可以解释为什么MainWindow是部分的.XAML声明的哪些部分进入BAML文件?我想知道加载.baml文件的时间(例如谈论窗口时).谢谢您的帮助.
根据我在下面的参考文献中的理解,在XAML中声明的所有内容都被编译为BAML; .g.cs和.xaml.cs编译到IL的文件; .xaml.csIL从.xaml.cs文件g.cs中的代码生成(显然),IL包含生成的与BAML交互的代码(而不是从BAML自身生成的IL代码).
查看此博客文章以供参考.总而言之,作者说XAML的编译分两步进行:
第1步.第一步是使用xamlc.exe编译器将XAML文件编译为BAML.例如,如果我们的项目包含文件名Window1.xaml,编译器将创建一个名为Window1.baml的临时文件,并将其放在obj\Debug子文件夹中(在我们的项目文件夹中).同时,使用我们选择的语言为我们的窗口创建一个分部类.例如,如果我们使用C#,编译器将在obj\Debug文件夹中创建一个名为Window1.g.cs的文件.g代表生成.
部分课程包括三件事:
•窗口中所有控件的字段.
•从程序集加载BAML的代码,从而创建对象树.当构造函数调用Initialize Component()时会发生这种情况.
•为每个字段分配适当的控制对象并连接所有事件处理程序的代码.这发生在名为Connect()的方法中,BAML解析器每次找到命名对象时都会调用它.
第2步.当XAML到BAML编译阶段完成时,Visual Studio使用适当的语言编译器来编译我们的代码和生成的部分类文件.对于C#应用程序,它是处理此任务的csc.exe编译器.已编译的代码成为单个程序集Window1.exe),每个窗口的BAML作为单独的资源嵌入.
| 归档时间: |
|
| 查看次数: |
7203 次 |
| 最近记录: |