【问题标题】:Get Types in assembly (error: System.Reflection.ReflectionTypeLoadException)获取程序集中的类型(错误:System.Reflection.ReflectionTypeLoadException)
【发布时间】:2011-05-22 07:26:30
【问题描述】:

我收到“异常详细信息:System.Reflection.ReflectionTypeLoadException:无法加载一个或多个请求的类型。检索 LoaderExceptions 属性以获取更多信息”类型的异常。使用以下代码:

public IEnumerable<Type> FindClassesOfType(Type assignTypeFrom, IEnumerable<Assembly> assemblies, bool onlyConcreteClasses = true)
    {
        foreach(var a in assemblies)
        {
            foreach (var t in a.GetTypes())

我需要获取每个程序集中定义的类型,但似乎无法生成。

我已经通过删除 dll、清理解决方案、重新加载解决方案等执行了与错误程序集创建相关的所有典型程序,但没有任何反应。

我想通过找到一种方法来检索更多错误信息,或者找出哪个程序集产生问题或类似的东西来请求解决这个问题的想法。当前的异常消息非常模糊,无法意识到问题所在。

ps:附加信息,当我运行重建操作时,所有进程都正确生成,没有错误。

【问题讨论】:

    标签: c# asp.net-mvc entity-framework system.reflection


    【解决方案1】:

    错误信息说明了你需要的一切,真的:

    try {
        // your code
    } catch (ReflectionTypeLoadException ex) {
        // now look at ex.LoaderExceptions - this is an Exception[], so:
        foreach(Exception inner in ex.LoaderExceptions) {
            // write details of "inner", in particular inner.Message
        }
    }
    

    【讨论】:

    • 嗨@Marc-gravell,谢谢你的回复。我对这种方法有一个特殊的问题,我在我的代码中使用了 yield return 并且不可能在 try catch 代码中包含 yield。我发现了另一种使用 fuslogvw.exe 融合日志的方法。许多模块出现,但都在其详细信息中显示“工作正常”。我不知道,非常感谢...
    • @Ssebastian_h - 但是,您可以调用任何实用程序方法,并且 that 可以使用 try/catch/finally ;p
    【解决方案2】:

    如果您使用实体框架,请检查 Web.Config 中的版本是否与您的项目中引用的版本相同。

    【讨论】:

      【解决方案3】:

      DLL 是您创建的吗?您的目标是哪个框架?

      我刚才遇到了这个问题。即使使用框架 3.5(使用 CLR2)编译我的外部库,也无法导入 DLL。错误与您的相同。我已经解决了重建面向框架 3.0 的库的问题,并且现在似乎可以工作了。我将我的 dll 留在 Plugins 文件夹中,没有任何问题。

      Unity forums有很多类似的问题。

      也许您已经有了解决方案,但这可以帮助将来需要它的任何人(就像我需要的那样)。

      最好的问候!

      【讨论】:

      • 嗨@Rafael-brasil 我批准了答案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-20
      • 1970-01-01
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多