【问题标题】:What kind of problem can cause a TypeLoadException?什么样的问题会导致 TypeLoadException?
【发布时间】:2010-06-22 15:22:33
【问题描述】:

我有一个大而臃肿的软件,我想向它添加一个新的 GUI 元素。 GUI 元素是使用 XAML 和 WPF 编写的。我在单独的程序集中创建了 UI 元素,并在大软件中引用它。这两个项目在 VS2010 下顺利编译,但是当我运行我的应用程序时,我得到了一个TypeLoadException

使用调试器查看异常,我收到以下消息:Could not load type GUI.Dashboard from assembly GUI, blah, blah。没有InnerException,也没有更多细节。

.GNU 文档说,当没有消息传递给异常的构造函数时,就会出现此消息。我假设异常的产生者本身并不知道它是如何发生的。

我尝试使用工具Fuslogvw.exe,它有效地向我展示了一些无关紧要的缺失依赖项。但是,它无法找到有关此异常的任何信息。

什么样的问题可能会引发像这样的不精确异常?有没有办法让 Fuslogvw.exe 知道它以获取一些详细信息?

提前谢谢你,

编辑: 我用调试符号有效地编译了我的应用程序。当我尝试实例化一个包含对有问题符号的引用的类时,就会发生异常。即:

class SomeClass
{
    GUI.Dashboard dashboard;
}

调用跟踪看起来像这样:

at SomeClass..ctor()
at MainClass.Main() din MainClass.cs:line 42

【问题讨论】:

  • 如果您使用调试符号编译,您应该检查异常的堆栈跟踪。它应该指出你的问题所在。
  • 是的,我有异常的堆栈跟踪,但它不是很有帮助。结果我编辑了这篇文章。
  • 您是否有可能存在程序集名称冲突?还是在 GAC 或某处具有相同名称的程序集的旧版本?
  • @Eric Dahlvang:终于想通了(A.exe 引用了 A.dll),并在我阅读您的评论时将其发布在这里。如果我早点阅读您的评论,将会节省很多时间。 :)

标签: c# exception clr


【解决方案1】:

可能的问题包括:

  1. 您引用的程序集仅为 x64,而您的使用者是 32 位 CLR 上的 x86 或 AnyCPU
  2. 您的使用者程序集是针对引用程序集的不同版本编译的

您可以尝试use FusLogVW 以打开程序集绑定日志记录并检查日志文件以获取有关失败原因的更多信息。

【讨论】:

  • 我仔细检查了配置,这两个项目都是针对 AnyCPU 的。此外,正如我在帖子中所说的那样,我使用Fuslogvw.exe 来获取有关此错误的详细信息,但它甚至没有显示它,尽管它列出了应用程序加载的所有其他程序集(成功和失败的程序集)
【解决方案2】:

当公共语言运行时找不到程序集、程序集中的类型或无法加载类型时,将引发 TypeLoadException。

TypeLoadException 使用 HRESULT COR_E_TYPELOAD,其值为 0x80131522。

有关 TypeLoadException 实例的初始属性值列表,请参阅 TypeLoadException 构造函数。

来源:MSDN

【讨论】:

    【解决方案3】:

    只是添加另一个答案:

    我们有一个 C++ 客户端调用 .NET COM dll。

    .NET dll 的开发者重命名了包含 C# 类的命名空间,尽管 progid 在类属性和 C++ 调用代码中保持不变,但运行时无法加载对象,导致此错误。

    【讨论】:

      【解决方案4】:

      我终于找到了这个错误的原因:显然,在某些情况下引用 .exe 文件不能正常工作。一些方法和类加载正常,但有些失败。在另一个项目中,引用这个 .exe 文件没有问题。

      切换到 .dll 格式解决了所有链接问题。我认为这是 CLR 中的一个错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-18
        相关资源
        最近更新 更多