【问题标题】:When I build a Silverlight project, what happens to XAML files?当我构建 Silverlight 项目时,XAML 文件会发生什么情况?
【发布时间】:2012-06-10 18:28:40
【问题描述】:

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

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

【问题讨论】:

标签: c# .net silverlight xaml build


【解决方案1】:

Jon Skeet 对中间 .g.cs 文件的回答(现在已删除,但下面引用的那部分内容)部分正确,但没有完整回答您的实际问题: p>

JS:构建过程的早期部分在 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 时,其余的解析(元素树和模板等)实际上在运行时完成并创建您创作的元素的可视化树。

【讨论】:

  • 确实感谢您的解释性回答!
  • @pencilCake:非常好的参考。以前没见过(主要是因为我的 Silverlight 工作量是 WPF 工作量的 100 倍)。干杯
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    • 2018-02-19
    • 1970-01-01
    相关资源
    最近更新 更多