当我构建Silverlight项目时,XAML文件会发生什么?

时间:2012-06-10 18:28:41

标签: c# .net silverlight xaml build

您能否在编译方面解释XAML文件的生命周期?

当我构建Silverlight项目时,构建过程中的XAML文件会发生什么?

2 个答案:

答案 0 :(得分:3)

关于Jon Skeet的中间.g.cs文件的答案(现已删除,但下面引用了上下文的部分)部分正确但未完全回答您的实际问题:

  

JS:构建过程的早期部分创建了一个Foo.i.g.cs文件   obj目录包含一个部分类,并在其中编译   正常的方式以及你自己的.cs文件。

.g.cs文件包含在InitialiseComponent()期间将命名元素连接到类成员所需的代码隐藏中缺少的部分。例如这是来自一个基本的MainPage.g.cs:

public void InitializeComponent() {
    ...
    System.Windows.Application.LoadComponent(this, new System.Uri("/SilverlightApp1;component/MainPage.xaml", System.UriKind.Relative));
    this.LayoutRoot = ((System.Windows.Controls.Grid)(this.FindName("LayoutRoot")));
}

这有点像为WinForms控件/对话框生成的设计器文件,但是在编译时而不是设计时发生。

  • 编译器解析以验证XAML并确定需要生成哪些命名元素(进入分部类)。
  • 在构建期间,XAML文件本身作为资源存储在DLL中(在上面的示例中,它存储为"/SilverlightApp1;component/MainPage.xaml"
  • 注意:仅对于WPF,嵌入式XAML文件实际上转换为更高内存效率的二进制版本,称为BAML文件。

回答您对Jon Skeet的评论(现已删除),您在询问时部分正确:

  

解析整个XAML文档 - 所有元素,属性等 -   不是WPF或SL版本的一部分?我是对的吗?

除了上面提到的解析之外,对于验证和命名元素,当LoadComponent()有效地反序列化时,其余的解析(元素树和模板等)实际上是在运行时完成 XAML并创建一个您创作的元素的可视树。

答案 1 :(得分:0)

当您构建一个Silverlight项目时,会创建一个.xap文件,这基本上只是一个带有另一个扩展名的.zip文件,其中包含一个AppManifest.XAML和一个DLL文件中的项目(以及DLL:s for other)依赖)。

如果您通过dotPeek或Reflector运行DLL,您将看到您创建的XAML文件在dll的资源中完好无损。