.net – 如何重现导致/引发ReflectionTypeLoadException?

遗憾的是,对此异常的引用通常具有异国情调,并且可能在您例如通过Assembly.GetTypes()枚举类型 – 例如,它发生在我们的某个部署上,但同一组程序集在Integration Server上正常工作.

为了加强这种类型的错误,我希望能够引发这样的异常,看看我的异常处理代码是否按预期工作.

因此,任何指针都是有用的,例如只知道什么样的事情导致这个例外.

编辑
我到目前为止的尝试:

>在程序集A中定义一个使用程序集B属性的类型
>让一些代码遍历程序集中的所有类型
属性已指定.
>我只在DEBUG标志为true时才构建属性
>然后,我将该依赖项的发布版本复制到相关文件夹中

但我只设法得到一个带有非常清晰的错误消息的TypeLoadException

以下原因导致此异常:

你有程序集A,它定义了以下类:

public class AC
{
    public BC GetBC() { /* ... */ }
}

你有程序集B,它定义了BC类.
现在,当您加载程序集A并获取类AC的成员时,例如使用assembly.GetTypes().SelectMany(t => t.GetMembers()).ToList();,框架尝试解析BC.它甚至知道它在程序集B中.但是,如果框架解析了不包含BC的程序集B,则会抛出TypeLoadException.如果程序集B不是最新的,则会发生这种情况,因为您在部署中忘记了它.

更新:
要实际获取ReflectionTypeLoadException,场景非常相似.但是,您不需要在AC中有一个返回BC的方法,但您需要从BC派生AC:

public class AC : BC
{
}

使用LoaderExceptions属性,可以检索导致此ReflectionTypeLoadException的异常.在我的例子中,这是一个TypeLoadException,说明它无法加载的类型.

https://stackoverflow.com/questions/7162289/how-to-reproducably-cause-provoke-a-reflectiontypeloadexception

转载注明原文:.net – 如何重现导致/引发ReflectionTypeLoadException?