gpt4 book ai didi

.net - 如何可重复地导致/引发 ReflectionTypeLoadException?

转载 作者:行者123 更新时间:2023-12-01 11:56:05 26 4
gpt4 key购买 nike

可悲的是,对此异常的引用通常具有异国情调,并且可能发生在您例如通过 Assembly.GetTypes() 枚举类型- 举个例子,它发生在我们的一个部署上,但同一组程序集在集成服务器上运行良好。

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

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

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

  • 在程序集 A 中定义一个类型,它使用程序集 B 的属性
  • 有一些代码迭代程序集中的所有类型,其中说
    属性被指定。
  • 我仅在 DEBUG 标志为真时才构建该属性
  • 然后我将该依赖项的发布版本复制到相关文件夹

  • 但我只设法得到一个 TypeLoadException带有非常明确的错误消息

    最佳答案

    以下原因导致此异常:

    您有定义以下类的程序集 A:

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

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

    更新:
    实际得到一个 ReflectionTypeLoadException ,场景非常相似。但是,您不需要在 AC 中有方法。返回 BC但你需要派生 AC来自 BC :
    public class AC : BC
    {
    }

    使用 LoaderExceptions属性,您可以检索导致此 ReflectionTypeLoadException 的异常.就我而言,这是一个 TypeLoadException确切说明它无法加载的类型。

    关于.net - 如何可重复地导致/引发 ReflectionTypeLoadException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7162289/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com