如何对未指定类型的 TypeLoadException 进行故障排除?



我有一个Windows Phone 7.1应用程序,它引用了Windows Phone 7.1库。该库引用了一个PCL,该PCL将Windows Phone 7或更高版本作为目标。

有一次,应用程序试图从库中创建一个类的新实例,该库从PCL扩展了一个类。PCL类有一个受保护的构造函数,所以我在库类中重写它以使其公开。构造函数采用1个参数。在应用程序中,我创建了一个这一参数的实例,并将其传递给库中的构造函数,该构造函数没有自己的代码,只有: base()传递给另一个构造函数。

我在windows手机模拟器中运行了该应用程序,一切都很顺利。应用程序加载后,我浏览了几个屏幕。

我碰到了一个断点,然后跨过去了。我很好地进入了库的构造函数,但当我尝试更进一步,即进入PCL的构造函数时,我只得到一个TypeLoadException,上面写着"加载类型时发生故障"。堆栈跟踪在库构造函数处停止,并且没有内部异常。

我也试过Windows Phone 7.8模拟器。我还尝试过使用无参数构造函数直接在库类的构造函数中创建新实例,只说: base(new ...),但都以同样的方式失败了。

我不知道如何找出问题所在,因为我不知道它可能在寻找什么,但却无法找到。我在项目的构建目录中的清单中看到了库和PCL程序集。

我的谷歌地图快干涸了。有人知道我可以继续寻找哪里吗?

谢谢。

我是个该死的白痴。

因此,正如它所指出的,从PCL加载一些东西时出现了问题,但这是一个非常深奥的错误。NET还没有准备好,只是在没有告诉我任何事情的情况下呕吐。

为了解决这个问题,我注释掉了构造函数的整个主体,它最终从PCL创建了几个其他类的实例,并将它们设置为成员变量。这起到了作用。

然后我开始取消对构造函数的注释,直到它再次失败。把我带到一个不及格的班级。为其构造函数接受的所有对象传递null仍然会导致TypeLoadException,因此它必须是参数之一。我删除了所有的参数,瞧,它确实起作用了。然后我一次加一个参数,直到它在我脸上爆炸。

事实证明,我问题的根源是,尽管在windows phone 7和silverlight 4下编译得很好,但PCL使用的是windows phone 7实际上不支持的功能。也就是说,共变体和反变体通用接口。我不得不重构我的PCL,这样它就可以处理不变的泛型类型,一切都能正常进行。

最新更新