什么样的问题会导致TypeLoadException?

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

通过调试器查看exception,我收到以下消息: Could not load type GUI.Dashboard from assembly GUI, blah, blah 。 没有InnerException也没有任何进一步的细节。

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

我尝试使用工具Fuslogvw.exe ,它有效地向我展示了一些不相关的遗漏依赖项。 但是,它无法找到有关此exception的任何信息。

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

先感谢您,

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

 class SomeClass { GUI.Dashboard dashboard; } 

呼叫追踪看起来像这样:

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

可能的问题包括:

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

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

当公共语言运行库找不到程序集,程序集中的类型或无法加载类型时,抛出TypeLoadException。

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

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

资料来源: MSDN

只是为此添加另一个答案:

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

.NET dll的开发人员重命名了包含C#类的命名空间,虽然progid在class属性和C ++调用代码中保持相同,但运行时无法加载对象导致此错误。

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

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