Windows phone 7 程序集上的GetExportedTypes()引发NotSupportedException

Windows phone 7 程序集上的GetExportedTypes()引发NotSupportedException,windows-phone-7,reflection,Windows Phone 7,Reflection,我在将WindowsPhone7.5类库加载到WP单元测试框架中时遇到了一些严重的问题。它在我的程序集上内部调用GetExportedTypes(),该程序集抛出一个不包含任何详细信息的ReflectionTypeLoadException。其消息为“ReflectionTypeLoadException”,其LoaderExceptions为null(“无法计算表达式”)。程序集未使用任何第三方程序集。如果我创建一个单独的WP7应用程序并做同样的事情,我会得到同样的结果。我是一个非常有经验的反

我在将WindowsPhone7.5类库加载到WP单元测试框架中时遇到了一些严重的问题。它在我的程序集上内部调用GetExportedTypes(),该程序集抛出一个不包含任何详细信息的ReflectionTypeLoadException。其消息为“ReflectionTypeLoadException”,其LoaderExceptions为null(“无法计算表达式”)。程序集未使用任何第三方程序集。如果我创建一个单独的WP7应用程序并做同样的事情,我会得到同样的结果。我是一个非常有经验的反射用户,但是由于没有任何详细的错误,我的研究完全停止了。为了完整起见,它是Windows Phone版本的Fluent断言

异常上的
类型
数组如何?它是否包含值?如果是,它是否也包含
null
s?如果是这样,您可以找出哪些类加载失败:您知道程序集中的所有类,并且知道哪些类加载正确。缺少的是无法加载的类。也许这些信息提供了一些线索

这个答案是基于,特别是这些位:

LoaderExceptions
属性的备注中:

LoaderExceptions属性检索与类型数组并行的Exception类型数组。每当反射无法加载类时,此数组将包含空值

类型的文档中
属性:

包含在模块中定义并加载的类的类型数组。此数组可以包含一些空值


我找到了!指给我看他最近写的一篇文章。我使用的是运行时(!)不支持的协变接口(使用out参数)。编译器为什么不保护我不受此影响对我来说是一个很大的谜(也是一个巨大的失望)

“无法计算表达式”和
null
是不同的。您可以尝试在代码中捕获异常并访问那里的
LoaderExceptions
。我已经尝试过了,但是当我探测LoaderExceptions时,我得到了“无法计算表达式”。不要“探测”。如果你在调试器中仍然看不到它的值,那么把它分配给一个变量,甚至可能把它转换成一个字符串……非常奇怪。
InnerException
呢?也为空。作为一名.NET开发人员,在我的整个职业生涯中,我从未见过如此奇怪的例外。它是(不,不是空的)哇。现在你需要从头开始:(1)创建一个测试应用程序,通过反射加载你的程序集,并验证它是否失败(2)从这个程序集中删除类,直到加载不再失败(3)你现在得到了有问题的类,并有望找到问题。但是什么样的构造会导致这种情况?了解这一点有助于我找出这一切的根本原因。有关此异常的一个可能原因,请参阅。为什么异常的所有属性都为null是我没有答案的。经过几个小时的反复试验,我已经在我的项目中找到了一个嵌套类的问题。看见每当我避免调用它的Use()方法时,问题就消失了。这个类有什么特别之处以至于WP7被它卡住了?仅供参考,博客帖子链接现在返回404。