2010-06-22 106 views
0

我有一个庞大而臃肿的软件,我想为它添加一个新的GUI元素。 GUI元素是使用XAML和WPF编写的。我在一个单独的程序集中创建了UI元素,并在大型软件中引用它。这两个项目在VS2010下顺利编译,但是当我运行我的应用程序时,我得到一个TypeLoadException什么样的问题会导致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 
+0

如果您使用调试符号进行编译,您应该检查异常的堆栈跟踪。它应该指出你的问题。 – Reddog 2010-06-22 15:37:51

+0

是的,我得到了异常的堆栈跟踪,但它不是很有帮助。因此我编辑了这篇文章。 – slaphappy 2010-06-22 15:47:46

+1

有没有可能会发生程序集名称冲突?或者GAC中有相同名称的组件的旧版本,或者某处? – 2010-06-22 16:52:07

回答

-2

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

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

0

可能的问题包括:

  1. 您引用的组件只支持x64和你的消费者是x86或AnyCPU上32位CLR
  2. 您的消费者组装是针对不同版本的引用程序集编译的

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

+0

我仔细检查了配置,这两个项目都针对AnyCPU。此外,正如我在我的文章中所做的那样,我使用'Fuslogvw.exe'来获取有关此错误的详细信息,但它甚至没有显示它,尽管它列出了应用程序加载的所有其他程序集(成功和失败的程序集) – slaphappy 2010-06-22 15:58:19

0

公共语言运行时找不到程序集,程序集中的类型或无法装入类型时,会引发TypeLoadException。

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

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

来源:MSDN

0

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

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

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

相关问题