Xamarin.Forms iOS 在带有自定义控件的 XAML 页面上崩溃

Xamarin.Forms iOS crash on XAML pages with custom controls

我正在开发一个 Xamarin.Forms 项目,为此我最近将共享项目从 PCL 升级到了 .NETStandard。

那时,我遇到了来自我的几个 UI XAML 文件的构建问题,错误是:

Failed to resolve assembly: ‘MyAssembly, Version 0.0.0.0, Culture=neutral, PublicKeyToken=null’

发现问题文件是那些引用自定义 XAML 控件的文件。在网上找到几个有类似问题的人后,我最终发现我可以通过为那些从 CompileSkip 的页面设置 XamlCompilationOptions 来解决这个问题。该项目现在为 iOS 和 Android.

构建

Android 版本正常工作,但是 iOS 版本在其中一个页面尝试加载时崩溃,由于存在自定义控件,并出现错误,例如:

Xamarin.Forms.Xaml.XamlParseException … Type shared.SharedControl not found in xlmns clr-namespace: …

有没有人遇到过这个问题,如果有,你解决了吗?是代码问题还是 Xamarin / Visual Studio Mac 错误?

理想情况下,我不想将这些页面的 XamlCompilationOptions 设置为 Skip,但无论哪种方式,我都不明白为什么它应该影响 iOS 而不是 Android.

首先,XamlCompilationOptions.Compile 表示在应用程序 class 或项目时编译 XAML built.While XamlCompilationOptions.Skip 在应用程序时执行相同的操作在设备上 运行。

此外,我建议您可以进行以下操作:

  1. 删除并重新生成所有共享文件
  2. 从 App.xaml
  3. 中删除 ;assembly:xxx
  4. 清理并重新构建。

这里有一个类似的帖子供您参考Xamarin.Forms.Xaml.XamlParseException has been thrown

PS:有一个link关于how to Upgrade PCL to .NET Standard Class Library

您需要先加载该程序集,然后才能使用它。在 Xaml 上它不加载,只是尝试到达,如果未加载则崩溃。在使用它之前,您需要通过调用方法或创建属于 MyAssembly 的对象来加载程序集。

程序集应该有一个 Init 方法来初始化事物。你应该调用它。