什么可能导致Visual Studiounit testing中的System.TypeLoadException?

我有一个编译好的C#.NET类库MyClassLibrary 。 我正在尝试为它创建一个unit testing项目(使用Visual Studiounit testing框架,使用Visual Studio 2010)。 类库中确实有大类,但每当我对最简单的类运行最简单的测试时,我会得到以下exception:

测试方法MyClassLibraryTest.MyClassLibraryTests.MySimpleClassTest抛出exception:System.TypeLoadException:无法从程序集“MyClassLibrary,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null”加载类型“MyClassLibrary.MySimpleClass”。

我正在处理的所有项目都在同一个解决方案中,所有项目都是针对.NET 4.0编译的。 所有这些都在Windows 7 64位计算机上。

这是奇怪的部分:当我“ 运行 ”测试时,我得到上述错误。 但是当我“ 调试 ”测试时,它运行正常。 为什么?

我只是撞了一下头一小时。 问题是我有一个名为Something.exe的命令行项目,该项目使用名为Something.dll的类库项目。

也发生在我身上。 在我的情况下出现了问题,因为测试项目和unit testing项目具有相同的名称。 如果这也是你的情况,那么重命名其中一个项目并重命名输出文件名以修复它。

MyClassLibrary程序集在配置管理器中设置为x86模式。 将其更改为x64修复它。 我真的希望Visual Studio能够检测到这一点并将其报告为一个不那么模糊的错误。

也发生在我身上。 它与构建x64,Release和x86模式有关。 在我的情况下,我删除了bin中的文件夹(参考程序集和unit testing中的debug / release / x86)并重新运行我的unit testing。 VS2010在某种程度上报告了输出窗口中的错误。 这解决了我。

今天通过这个,虽然我会离开我的修复。

规格:VS 2013 / .Net 4.0

解决方案:进入菜单>测试>测试设置>默认处理器架构> X64

在此处输入图像描述

我有与Trey类似的问题,但我使用的是SharePoint解决方案,而不是BizTalk,它也使用GAC部署。 GAC有一个较旧的组件。 当我通过缩回解决方案移除GAC组件时,测试通过。

我在VS 2013中使用NUnit 3时遇到此错误。我通过在测试项目中删除包含未找到类型的程序集的程序集引用来解决它,然后重新添加引用。

这里有相同的消息,但我也无法调试测试。

在我的例子中,我测试的DLL被部署到GAC(BizTalk要求)。 我创建了一个新类并正在测试它,但是因为添加了测试类而没有GAC再次使用DLL。

如果这有助于其他人有相同的错误(我意识到它不直接回答问题重新发布与调试); 我在遗留项目中合并了一个与现有项目冲突的命名空间,因此将其重命名。 尝试从该项目创建表单时出现此错误。

我检查了平台目标是否相同,并删除了。\ bin \目录以确保清理重建,删除了对合并项目的引用并重新添加它,但仍然是同样的错误。

最后(!)我检查了项目属性中的程序集名称(右键单击项目,选择’属性’,选择’应用程序’选项卡)并更改它以匹配默认名称空间,现在一切都很好。

当我试图添加具有相同主项目名称的测试项目时,它发生在我身上。

我的主项目名称是:Calculator.OperationsManager我的测试项目名称是:Calculator.OperationsManager

我已将测试项目名称更改为Calculator.OperationsManager.Test,一切顺利。