XAML 文件 (WPF) 的编译

2024-04-01

我想了解XAML文件的编译过程。很抱歉将这个问题放在这里,但我确实没有找到任何资源深入解释这个过程。

我知道 XAML 被编译成 .baml 文件。但是: .baml 是从生成的 .g.cs 文件编译而来的吗?或者 .baml 是独立的,并且是从生成的 .g.cs 和原始 .xaml.cs 文件生成的 IL 代码 - 这可以解释为什么 MainWindow 是部分的。 XAML 声明的哪些部分进入 BAML 文件? 我还想知道 .baml 文件的加载何时发生(例如在谈论窗口时)。 谢谢您的帮助。


根据我基于以下参考的理解,XAML 中声明的所有内容都会编译为 BAML;.g.cs and .xaml.cs编译为 IL 的文件;.xaml.cs从代码生成的 IL.xaml.cs文件(显然),以及g.csIL 包含生成的与 BAML 交互的代码(而不是 BANK 本身生成的 IL 代码).

检查这个博客文章 http://vishalnayan.wordpress.com/2011/06/18/understanding-in-and-out-of-xaml-in-wpf/以供参考。总而言之,作者说 XAML 的编译分为 2 个步骤:

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

部分类包括三件事:

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

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XAML 文件 (WPF) 的编译 的相关文章

随机推荐