XAML编译在运行时的工作原理

时间:2016-08-31 14:43:55

标签: xaml xamarin xamarin.forms

简短版本:

如果不使用xamlc预编译xaml,应用程序中捆绑了什么来在运行时编译xaml?它是否依赖于xamarin.forms nugets之外的应用构建工具集中的电流?

长版:

我们有一个从列表视图继承的自定义元素。我们在xaml中使用此元素,并在xaml中设置CachingStrategyobviously is a problemdocumented properly。但是在我们这样做的时候(2015年12月左右)还不知道。

使用当时可用的xamarin工具集构建应用程序(不确定版本,因为在网站上我只能回溯到2016年3月的版本),该应用程序无崩溃工作。

现在,构建相同的代码库(注意:xamarin形式的nuget版本没有变化等),应用程序崩溃。启用XAML预编译阻塞问题,所以我们做得对,应用程序正常工作。

但是 - 这是否意味着构建工具链的某些部分与应用程序合并?如果是这种情况,我们如何控制构建过程中的版本稳定性?

2 个答案:

答案 0 :(得分:2)

XAMLC生成在XamlCTask构建步骤中添加到程序集的IL:

此工具包含在Xamarin安装程序中,当然由版本化安装程序分发,因此如果您已经是工具链版本控制,则无需执行任何其他操作...

恕我直言,工具链版本应至少包括所有已安装的Xamarin组件,Visual Studio组件,MSBuild工具,Xcode,Xcode cmd行工具,Android API SDK(工具,构建 - 工具,平台工具)等......

即。如果您有新员工启动或开发人员硬盘崩溃或需要部署新的CI服务器,那么今天如何重建该环境以使其与您的其他环境相匹配?如果您每次都从头开始进行临时安装,那么您可能做错了; - )

作为DevOps,我个人以及我的客户对所有工具安装程序进行脱机备份。这包括操作系统数据驱动器的快照,其中包括开发人员的环境,CI环境,密钥签名环境等......

与这些工具版本(操作系统,工具和Nugets)相关的信息放在PowerShell Desired State Configuration文件中,该文件添加到解决方案(.sln)根目录,并且像任何其他源文件一样进行版本控制。

如果我每个人都需要重建dev / build环境,那么运行DSC会将完整的环境恢复到物理盒或VM ...对于OS-X,我们通常创建并离线存储驱动器的.IMG(我们还创建了VM以便恢复到。)

答案 1 :(得分:0)

应用程序中没有嵌入构建的工具链的任何部分。

Xaml文件作为EmbeddedResource嵌入到程序集中,当您实例化视图时,默认构造函数会调用InitializeComponent(),然后找到正确的Xaml,解析它并将其膨胀为使用反射的对象树。

根本没有魔法。