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

你能给我一个解决System.TypeLoadException问题的方法吗?

我对我的解决方案中的现有项目有exception,我在同一解决方案中从unit testing项目中引用。

当我运行unit testing时抛出此exception。 他们因为这个例外而失败:

细节:

测试方法MyErrorHandler.Test.MyTest.Parse_RecievesValidMessage_ReturnsArray引发exception:System.TypeLoadException:无法从程序集’MyTestAssemblyName.Test,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = Somenumber加载类型’MyTestNameSpace’。

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

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

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

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

您可以尝试从Debug – > Tools – > Exceptions中单击“抛出exception时中断”,然后单击“Thrown”列中的所有复选框。 当您重新运行测试时,您应该能够确切地看到抛出此exception的位置。

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

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

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

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