什么可能导致Visual Studio单元测试中的System.TypeLoadException?

时间:2011-04-20 19:36:36

标签: c# visual-studio-2010 vs-unit-testing-framework

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

  

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

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

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

13 个答案:

答案 0 :(得分:33)

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

答案 1 :(得分:25)

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

答案 2 :(得分:10)

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

答案 3 :(得分:4)

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

答案 4 :(得分:2)

今天来到这里,虽然我会离开我的修复。

规格:VS 2013 / .Net 4.0

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

enter image description here

答案 5 :(得分:1)

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

就我而言,我测试的DLL已部署到GAC(BizTalk要求)。我创建了一个新类并且正在对它进行测试,但是自从添加了被测试的类以来,它没有再次使用该DLL。

答案 6 :(得分:1)

当我尝试使用相同的主项目名称添加测试项目时,发生了这种情况。

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

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

答案 7 :(得分:1)

我遇到了与Trey类似的问题,但是我有SharePoint解决方案而不是BizTalk,它也使用GAC部署。 GAC的大会较旧。当我通过缩回溶液来卸下GAC组件时,测试通过了。

答案 8 :(得分:0)

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

答案 9 :(得分:0)

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

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

最终(!)我检查了项目属性中的程序集名称(右键单击项目,选择'属性',选择'应用程序'选项卡)并更改与Default命名空间相匹配,现在一切都很好。

答案 10 :(得分:0)

以防万一有人需要此功能: 我已经在Visual Studio中创建了一个测试项目,并且想知道为什么即使Visual Studio反复要求我添加“ System.Web”作为引用也找不到某些类。

我这样做了,并且错误不断发生。对我来说,问题很简单(我知道我应该检查一下):我已经从创建.NET Core项目的模板创建了一个测试项目。将其更改为.NET Framework 4.6.1并添加“ System.Web”作为参考之后,一切正常。

答案 11 :(得分:0)

遇到同样的问题。以防万一它对任何人都有帮助-我设法通过将nuget软件包NUnit3TestAdapter从3.13.0降级到3.11.2来使其正常工作。

您可以找到有关此的更多信息-https://github.com/nunit/nunit-console/issues/424

答案 12 :(得分:0)

这也发生在我身上。我在域项目中安装了版本为1.5的nuget软件包,但在单元测试项目中仅安装了版本1.1。我通过更新单元测试项目上的版本以使其与域项目(针对其进行测试的项目)上的版本相匹配来解决了该问题。