XAML编译在运行时的工作原理
简短版本: 如果不使用xamlc预编译xaml,那么应用程序中捆绑了什么来在运行时编译xaml?它是否依赖于xamarin.forms nugets之外的应用程序构建时的当前工具集 长版本: 我们有一个从列表视图继承的自定义元素。我们在xaml中使用这个元素,并在xaml中设置XAML编译在运行时的工作原理,xaml,xamarin,xamarin.forms,Xaml,Xamarin,Xamarin.forms,简短版本: 如果不使用xamlc预编译xaml,那么应用程序中捆绑了什么来在运行时编译xaml?它是否依赖于xamarin.forms nugets之外的应用程序构建时的当前工具集 长版本: 我们有一个从列表视图继承的自定义元素。我们在xaml中使用这个元素,并在xaml中设置CachingStrategy,其中,和。但在我们这么做的时候(大约2015年12月),我们还不知道这一点 使用当时可用的xamarin工具集构建应用程序(不确定版本,因为在网站上我只能返回到2016年3月的版本),该应用
CachingStrategy
,其中,和。但在我们这么做的时候(大约2015年12月),我们还不知道这一点
使用当时可用的xamarin工具集构建应用程序(不确定版本,因为在网站上我只能返回到2016年3月的版本),该应用程序在没有崩溃的情况下工作
现在,构建相同的代码库(注意:xamarin表单nuget版本等没有更改),应用程序崩溃。在这个问题上启用XAML预编译,所以我们做得很好,应用程序可以正常工作
但是-这是否意味着构建工具链的某些部分与应用程序合并?如果是这种情况,我们如何控制构建过程中的版本稳定性?
XAMLC
生成IL,该IL在XamlCTask
构建步骤中添加到程序集:
所需状态配置
文件中,该文件添加到解决方案(.sln)根目录,并与任何其他源文件一样进行版本控制
如果我真的需要重建一个开发/构建环境,那么运行DSC会将一个完整的环境恢复到一个物理框或VM。。。对于OS-X,通常我们创建并离线存储驱动器的
.IMG
(我们也创建虚拟机以还原到该驱动器)。应用程序中未嵌入任何构建的工具链
Xaml文件作为EmbeddedResource
嵌入到程序集中,当您实例化视图时,默认构造函数调用InitializeComponent()
,然后它将找到正确的Xaml,解析它,并使用反射将其膨胀到对象树
这里一点魔力都没有。你知道当预编译被禁用时,应用程序中包含了什么吗?因为应用程序的旧版本没有预编译,并且它正在工作。而新的构建(同样没有预编译)会崩溃。@SunnyMilenov当XAML编译被禁用时,XAML将作为
嵌入资源存储在程序集中,您可以参考XamlLoader
类中的ReadResourceAsXaml
方法,并将其作为资源从程序集中加载并解析:如果您有一些有效的Xaml只在XamlC打开时工作,但在没有它的情况下失败,则这是一个错误,您应该报告它。这是有意义的,但这不是我们观察到的。我们在过去没有启用xamlc。而这一切都起了作用。升级camarin,重新构建应用程序(无代码更改,无xamlc),然后失败。正如我所说,它不是有效的XAML,因为我们在继承列表中使用CachingStrategy时犯了错误,但它并没有崩溃。我不知道你们观察到了什么,但我想我知道我是如何实现它的。。。