【发布时间】:2012-06-10 18:28:40
【问题描述】:
您能否解释一下 XAML 文件在编译方面的生命周期?
当我构建 Silverlight 项目时,XAML 文件在构建过程中会发生什么情况?
【问题讨论】:
标签: c# .net silverlight xaml build
您能否解释一下 XAML 文件在编译方面的生命周期?
当我构建 Silverlight 项目时,XAML 文件在构建过程中会发生什么情况?
【问题讨论】:
标签: c# .net silverlight xaml build
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 控件/对话框生成的设计器文件,但发生在编译时而不是设计时。
"/SilverlightApp1;component/MainPage.xaml")回答您对 Jon Skeet 的评论(现已删除),您的提问部分正确:
因此解析整个 XAML 文档 - 所有元素、属性等 - 不是 WPF 或 SL 构建的一部分吗?我说的对吗?
除了上面提到的解析之外,对于验证和命名元素,当LoadComponent() 有效地反序列化 XAML 时,其余的解析(元素树和模板等)实际上在运行时完成并创建您创作的元素的可视化树。
【讨论】:
当您构建 Silverlight 项目时,会创建一个 .xap 文件,这基本上只是一个带有另一个扩展名的 .zip 文件,其中包含一个 AppManifest.XAML 和您的项目在一个 DLL 文件中(连同 DLL:s 用于其他依赖项)。
如果您通过 dotPeek 或 Reflector 运行 DLL,您会发现您创建的 XAML 文件在 dll 的资源中完好无损。
【讨论】: