首页 文章

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

提问于
浏览
2

精简版:

如果不使用xamlc来预编译xaml,应用程序中捆绑了什么来在运行时编译xaml?它是否依赖于xamarin.forms nugets之外的 current at the time of the app build 工具集?

长版:

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

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

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

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

2 回答

  • 0

    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)恢复到) .

  • 2

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

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

    这里根本没有魔法 .

相关问题