【问题标题】:Xamarin.Forms iOS crash on XAML pages with custom controlsXamarin.Forms iOS 在带有自定义控件的 XAML 页面上崩溃
【发布时间】:2018-09-04 15:42:59
【问题描述】:

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

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

无法解析程序集:‘MyAssembly,版本 0.0.0.0, Culture=neutral, PublicKeyToken=null'

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

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

Xamarin.Forms.Xaml.XamlParseException ... 类型 shared.SharedControl 不是 在 xlmns clr-namespace 中找到:...

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

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

【问题讨论】:

  • 我敢打赌,如果你对 android 使用 proguard,它的链接会和 ios 链接器一样好,你也会开始在 android 上崩溃。跳过是一种解决方法而不是解决方案。您最好解决迁移后出现的主要问题。无论如何,您的问题中没有足够的信息。
  • 谢谢,我通过链接xamarinhelp.com/upgrade-pcl-net-standard-class-library 迁移了它。这在 Android 端没有任何问题,仅适用于 iOS。

标签: c# ios xamarin xamarin.forms visual-studio-mac


【解决方案1】:

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

另外,我建议您可以执行以下步骤:

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

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

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

【讨论】:

  • 谢谢,该链接是我用来升级到 .NET Standard 的指南
  • stackoverflow.com/questions/42386406/…您可以访问链接了解更多信息
  • 第 2 步似乎已经为我解决了。我从所有引用共享控件的 XAML 视图文件中删除了 ;assembly=xxx ,并且它起作用了。谢谢!
【解决方案2】:

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

程序集应该有一个Init 方法来初始化事物。你应该打电话给它。

【讨论】:

  • 谢谢,我认为 Init() 方法应该是 InitializeComponent(),这是页面构造函数中调用的第一个方法。
  • 进一步阅读后,我在共享控件类中添加了一个静态 Init() 方法,并从 AppDelegate.cs 中调用它,但在我的情况下,这并没有解决问题。
猜你喜欢
  • 2016-04-15
  • 1970-01-01
  • 2017-05-05
  • 2011-03-04
  • 2012-08-03
  • 2012-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多