精简版:
如果不使用xamlc来预编译xaml,应用程序中捆绑了什么来在运行时编译xaml?它是否依赖于xamarin.forms nugets之外的 current at the time of the app build 工具集?
长版:
我们有一个从列表视图继承的自定义元素 . 我们在xaml中使用此元素,并在xaml中设置 CachingStrategy
,其中obviously is a problem和documented properly . 但是在我们这样做的时候(2015年12月左右)还不知道 .
使用当时可用的xamarin工具集构建应用程序(不确定版本,因为在网站上我只能回溯到2016年3月的版本),该应用程序无崩溃工作 .
现在,构建相同的代码库(注意:xamarin形式nuget版本没有变化等),应用程序崩溃 . 启用XAML预编译阻塞问题,所以我们做对了,应用程序工作 .
但是 - 这是否意味着构建工具链的某些部分与应用程序合并?如果是这种情况,我们如何控制构建过程中的版本稳定性?
2 回答
XAMLC
生成在XamlCTask
构建步骤中添加到程序集的IL:Xamlc.cs
XamlCTask.cs
此工具包含在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)恢复到) .应用程序中没有嵌入构建的工具链的任何部分 .
Xaml文件作为
EmbeddedResource
嵌入到程序集中,当您实例化视图时,默认构造函数会调用InitializeComponent()
,然后找到正确的Xaml,解析它,并使用Reflection将其膨胀到对象树 .这里根本没有魔法 .