我该如何排除故障:System.TypeLoadException?

时间:2011-09-20 15:15:28

标签: c# .net reference assemblies typeloadexception

您能告诉我一种解决 System.TypeLoadException 问题的方法吗?

我对我的解决方案中的现有项目有异常,我在同一解决方案中从单元测试项目中引用。

当我运行单元测试时抛出此异常。他们因为这个例外而失败:

详细说明:

  

测试方法   MyErrorHandler.Test.MyTest.Parse_RecievesValidMessage_ReturnsArray   抛出异常:System.TypeLoadException:无法加载类型   程序集'MyTestAssemblyName.Test中的'MyTestNameSpace',   Version = 1.0.0.0,Culture = neutral,PublicKeyToken = Somenumber。

我应该检查什么或应该从哪里开始调查?

5 个答案:

答案 0 :(得分:12)

抛出此异常的一种情况是,执行程序集与具有给定类型的程序集具有相同的名称。例如,如果您运行 MyApp.exe 且类型位于 MyApp.dll 中,则CLR将假定该类型应位于 MyApp.exe < / strong>即可。解决方案是重命名其中一个程序集。

答案 1 :(得分:3)

在异常消息中,或者在InnerException属性中,您可能会发现所请求的类型是什么,具有完全限定的名称,版本,程序集。检查是否可以从应用程序目录访问给定的程序集。可访问的含义在应用程序目录或应用程序的私有探测路径中。

编辑:还检查可以到达的附属程序集(由程序集引用类型加载程序加载失败)。

答案 2 :(得分:2)

您可以尝试从Debug中打开“抛出异常时中断” - &gt;工具 - &gt;例外并单击Thrown列中的所有复选框。当您重新运行测试时,您应该能够确切地看到抛出此异常的位置。

答案 3 :(得分:1)

嗯......这完全是我的坏事。

我提供了一个错误的程序集名称,导致bin文件夹中缺少DLL。

感谢我的配偶,他指着我查看bin文件夹。在检查添加的参考文献的“路径”后,我注意到它正在寻找一个完全不同的地方。

答案 4 :(得分:0)

了解内部异常。当静态构造函数抛出异常时,通常会发生这种情况。