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

Jay*_*van 26 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位计算机上.

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

Ami*_*iri 34

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

  • 因为性能原因,.NET运行时假定"MyAssembly"驻留在"MyAssembly.dll"或"MyAssembly.exe"中(而不是扫描太多文件).这是该语言的一个功能,您可以像其他任何程序集一样将.exe加载到您的应用程序中(我在几个场合使用过它).因此,当.NET运行时尝试加载"MyAssembly"时,它会尝试"MyAssembly.exe",看到它是一个有效的.NET程序集,加载它,并且无法找到相关的类. (3认同)

Pav*_*kov 25

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

  • fyi:我的项目名称不同.但在设置中,程序集名称/默认名称空间是相同的. (8认同)

Jay*_*van 10

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