XAML文件的编译(WPF)

15
我想了解XAML文件的编译过程。很抱歉在这里提出这个问题,但我真的没有找到任何详细说明此过程的资源。
我了解XAML被编译成.baml文件。但是:.baml是从生成的.g.cs文件编译出来的吗?还是独立的,从生成的.g.cs和原始的.xaml.cs文件生成IL代码——这就解释了为什么MainWindow是部分类。XAML声明的哪些部分进入BAML文件中?
我也想知道什么时候加载.baml文件(例如,当谈到一个窗口时)。感谢您的帮助。

问题的标题并不清晰,它没有明确说明目的。 - Aditya Bokade
1个回答

10
根据下面的参考资料,我理解XAML中声明的所有内容都会被编译成BAML;.g.cs.xaml.cs文件将被编译成IL;.xaml.cs IL代码是由.xaml.cs文件中的代码生成的(很明显),而g.cs IL代码包含与BAML交互所需的生成代码(而不是从BAML本身生成的IL代码)。
参考这篇博客文章。总结一下,作者说XAML的编译分为两个步骤:

第一步是使用xamlc.exe编译器将XAML文件编译成BAML。例如,如果我们的项目包括一个名为Window1.xaml的文件,则编译器将创建一个临时文件名为Window1.baml,并将其放置在obj\Debug子文件夹中(在我们的项目文件夹中)。同时,使用我们选择的语言创建一个窗口的局部类。例如,如果我们使用C#,编译器将在obj\Debug文件夹中创建一个名为Window1.g.cs的文件。g代表生成的意思。

局部类包括三个部分:

• 所有窗口中的控件的字段。

• 从程序集加载BAML,从而创建对象树的代码。这会在构造函数调用Initialize Component()时发生。

• 分配适当的控件对象到每个字段并连接所有事件处理程序的代码。这在一个名为Connect()的方法中发生,BAML解析器每次找到一个命名对象都会调用此方法。

第二步。当XAML-to-BAML编译阶段完成时,Visual Studio使用适当的语言编译器来编译我们的代码和生成的部分类文件。对于C#应用程序,它是由csc.exe编译器处理此任务。编译后的代码成为单个程序集(Window1.exe),每个窗口的BAML作为单独的资源嵌入其中。


能将WPF XAML编译成XBF吗? - lindexi
2
xamlc.exe不再单独提供,现在已成为msbuild的一部分。 - Polluks

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接