当我尝试在实际的iPhone上运行我的Xamarin Forms应用程序时,它失败并出现System.MissingMethodException:"类型为' System.ComponentModel.ReferenceConverter'的构造函数。没找到。"
它可以在iOS模拟器以及Android硬件和虚拟设备上正常工作。
我已经能够将其缩小到以下场景:使用引用成员的接口序列化对象:
public class Widget {
public ISprocket Sprocket { get; set; };
}
public interface ISprocket {
int SprocketId { get; set; }
}
执行行:
var w = new Widget { Sprocket = new Sprocket { SprocketId = 1 } };
string result = JsonConvert.SerializeObject(w);
无处不在(看似)除了我的iPhone 8+,它会抛出System.MissingMethodException
我使用的是最新版本的XF(2.5.0.122203)和JSON.NET(10.0.3)。
要重新创建此问题,请使用名为" TestBed"的iOS客户端创建新的Xamarin Forms解决方案。通过nuget添加Newtonsoft.Json,然后创建一个页面 " TestBedPage"具有以下内容:
using System;
using Newtonsoft.Json;
using Xamarin.Forms;
namespace TestBed
{
public class TestBedPage : ContentPage
{
public TestBedPage()
{
try
{
var m = new Widget { Sprocket = new Sprocket { SprocketId = 1 } };
var st = JsonConvert.SerializeObject(m);
Content = new Label { Text = st };
} catch (Exception ex) {
Content = new Label { Text = ex.ToString() };
}
}
}
public class Widget
{
public string Title { get; set; } = string.Empty;
public ISprocket Sprocket { get; set; }
}
public interface ISprocket
{
int SprocketId { get; set; }
}
public class Sprocket : ISprocket
{
public int SprocketId { get; set; }
}
}
将其部署到iPhone并运行。你应该得到一堆MissingMethodException堆栈跟踪。
有没有人知道这里发生了什么?
答案 0 :(得分:1)
问题是某些东西试图通过Activator
类通过System.ComponentModel.ReferenceConverter
ctor实例化System.Type
实例,但由于它未在您的应用程序中直接引用,因此它会被删除managed linker。
您需要提供custom linker configuration file,将其添加到您的Xamarin.iOS项目中。
请参阅here