7、XAML的编译过程
对于动态皮肤场景来说,在运行时加载和解析XAML是有意义的,对于那些没有支持XAML编译的.NET语言也是有意义的。但大多数WPF项目会通过MSBuild和Visual Studio完成XAML编译。XAML编译包括三项事情:
(1)将一个XAML文件转换为一种特殊的二进制格式
(2)将转换好的内容作为二进制资源嵌入到正在被创建的程序集中,然后执行链接操作
(3)将XAML和过程式代码自动连接起来
1.BAML
BAML是Binary Application Markup Language的缩写,意思是二进制应用程序标记语言,它其实是被解析、标记化(tokenized),最后转换为二进制形式的XAML。虽然大块的XAML代码可以被表示为过程式代码,但XAML到BAML的编译过程不会生成过程源代码。因此,BAML不像MSIL(Microsoft intermediate language,微软中间语言),它是一个压缩的声明格式,要比加载和解析普通的XAML文件快,且文件比普通XAML文件要小。BAML仅仅是XAML编译过程的详细实现,没有任何直接公开的方法,因此在未来它可能会被一些其他的东西所取代。
2.生成的源代码
提示 x:Class只能在要编译的XAML文件中使用。但是有时在没有x:Class的情况下,编译XAML文件也是没有问题的。这其实意味着没有对应的代码隐藏文件,因此你不能使用任何需要过程式代码才能实现的特性。因此,在没有x:Class标签的情况下,添加一个XAML文件到Visual Studio项目中,是很方便的一种部署已编译XAML并提高性能的方式,而不用创建代码隐藏文件。
如果你使用x:Class的话,一些过程式代码确实是在XAML编译过程中生成的,但是这些过程式代码仅仅是“粘合代码(glue code)”,类似于在运行时加载和解析松散XAML文件所要写的代码,如那些后缀为.g.cs(或.g.vb)的文件,这里的g表示generated(生成)。
每个生成的源文件中包含了一个由根对象元素中的x:Class指定的类的部分类定义。XAML文件中的每个已命名的元素在该部分类中都有一个成员(默认是私有的),这些成员的名称就是元素名称。其中还有一个InitialzeComponent方法用于完成一大堆烦人的工作,包括加载嵌入BAML资源、向成员赋予适当的实例(这些实例是在XAML中定义的)、绑定所有的事件处理程序(如果事件处理程序已在XAML文件中指定的话)。
7、XAML的编译过程的更多相关文章
- WPF 程序的编译过程
原文:WPF 程序的编译过程 基于 Sdk 的项目进行编译的时候,会使用 Sdk 中附带的 props 文件和 targets 文件对项目进行编译.Microsoft.NET.Sdk.WindowsD ...
- Android工程的编译过程
现在很多人想对Android工程的编译和打包进行自动化,比如建立每日构建系统.自动生成发布文件等等.这些都需要我们对Android工程的编译和打包有一个深入的理解,至少要知道它的每一步都做了什么,需要 ...
- GCC编译过程
以下是C程序一般的编译过程: gcc的编译流程分为四个步骤,分别为:· 预处理(Pre-Processing) 对C语言进行预处理,生成*.i文件.· 编译(Compiling) 将上一步生成的*.i ...
- Linux系统GCC常用命令和GCC编译过程描述
前言: GCC 原名为 GNU C 语言编译器(GNU C Compiler),因为它原本只能处理 C语言.GCC 很快地扩展,变得可处理 C++.后来又 扩展能够支持更多编程语言,如Fortran. ...
- Hadoop源码编译过程
一. 为什么要编译Hadoop源码 Hadoop是使用Java语言开发的,但是有一些需求和操作并不适合使用java,所以就引入了本地库(Native Libraries)的概念,通 ...
- gcc编译过程简述
在linux系统上,从源文件到目标文件的转化是由编译器完成的.以hello.c程序的编译为例,如下: dfcao@linux: gcc -o hello hello.c 在这里,gcc编译器读取源文件 ...
- android 编译过程
引用:http://www.cnblogs.com/devinzhang/archive/2011/12/20/2294686.html http://blog.sina.com.cn/s/blog_ ...
- [转]UE4 Blueprint编译过程
Blueprint 编译概述 一.术语 Blueprint,像C++语言一下的,在游戏中使用前需要编译.当你在BP编辑器中,点击编译按钮时候,BP资源开始把属性和图例过程转换为一个类对象处理. 1 ...
- TextMate2 最新版下载及源码编译过程
TextMate2 已经开源,我刚编译成功,如果有需要的同学可以点击下面百度网盘的链接下载.我系统版本是:Mac OS X 10.8.4. TextMate version 2.0-alpha.946 ...
随机推荐
- Oracle基础 shutdown和startup
一.shutdown命令:SHUTDOWN有四个参数:NORMAL.TRANSACTIONAL.IMMEDIATE.ABORT.缺省不带任何参数时表示是NORMAL. SHUTDOWN NORMAL: ...
- IQueryable与IEnumberable的区别
IEnumerable接口 公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代.也就是说:实现了此接口的object,就可以直接使用foreach遍历此object: IQueryable 接口 ...
- 关于Navicat Premium导入xlsx的问题
这段时间由于工作需要,频繁通过Oracle导入/导出大量数据,测试了很多软件,都不理想.PL/SQL Developer导入.导出都卡死:Oracle SQL Developer也是导入.导出都卡的半 ...
- Python 标准库 urllib2 的使用细节[转]
转自[http://zhuoqiang.me/python-urllib2-usage.html] Python 标准库中有很多实用的工具类,但是在具体使用时,标准库文档上对使用细节描述的并不清楚,比 ...
- 剑指Offer47 不用加减乘除做加法
/************************************************************************* > File Name: 47_AddTwo ...
- CSS3笔记
CSS/CSS3在线手册:http://www.css119.com/book/css/ CSS3实现水平垂直居中:http://bbs.html5cn.org/thread-87300-1-1. ...
- hdu 5444 Elven Postman(二叉树)——2015 ACM/ICPC Asia Regional Changchun Online
Problem Description Elves are very peculiar creatures. As we all know, they can live for a very long ...
- 图解SQL的inner join(join)、left join、right join、full outer join、union、union all的区别
对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Codin ...
- php nginx fastdfs 下载文件重命名
其实fdfs可以传入一个filename参数,指定文件名.. M00/00/00/fwAAAVGMateAafjTAAAABBW-xbM368.txt?filename=test.txt 这样下载时用 ...
- 20150323--MVC
MVC: Model view(视图层,模板) Control(控制层) 三层:数据访问,商业逻辑,用户界面(Webform,MVC). 服务端无状态:接受请求,返回页面,每次请求并返回界面,前后不是 ...