C# 什么可能导致Visual Studio单元测试中出现System.TypeLoadException?

C# 什么可能导致Visual Studio单元测试中出现System.TypeLoadException?,c#,visual-studio-2010,vs-unit-testing-framework,C#,Visual Studio 2010,Vs Unit Testing Framework,我有一个C#.NET类库MyClassLibrary,编译得很好。我正在尝试为它创建一个单元测试项目(使用VisualStudio2010的VisualStudio单元测试框架)。类库中确实有大型类,但每当我对最简单的类运行最简单的测试时,我都会遇到以下异常: 测试方法MyClassLibraryTest.MyClassLibraryTests.MySimpleClassTest引发异常: System.TypeLoadException:无法从程序集“MyClassLibrary,版本=1.0

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

测试方法MyClassLibraryTest.MyClassLibraryTests.MySimpleClassTest引发异常: System.TypeLoadException:无法从程序集“MyClassLibrary,版本=1.0.0.0,区域性=中性,PublicKeyToken=null”加载类型“MyClassLibrary.MySimpleClass”

我处理的所有项目都在同一个解决方案中,并且都是为.NET4.0编译的。所有这些都在Windows7 64位计算机上


奇怪的是:当我“运行”测试时,我得到了上面的错误。但当我“调试”测试时,它运行良好。为什么?

在configuration manager中将MyClassLibrary程序集设置为x86模式。将此更改为x64修复了它。我真希望VisualStudio能够检测到这一点,并将其报告为一个不那么晦涩的错误。

我也遇到过这种情况。它与x64、版本和x86模式的构建相关。在我的例子中,我删除了bin中的文件夹(参考程序集和单元测试中的debug/release/x86)并重新运行单元测试。VS2010在输出窗口中报告了错误。这为我解决了问题

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

我也遇到了这个问题。在我的例子中,出现问题是因为被测试项目和单元测试项目具有相同的名称。
如果这也是您的情况,请重命名其中一个项目并重命名输出文件名以修复它。

今天完成了此操作,尽管我将退出修复

规格:VS 2013/.Net 4.0

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


我在VS 2013中使用NUnit 3时出现了这个错误。我通过删除测试项目中包含找不到类型的程序集的程序集引用来解决此问题,然后重新添加引用。

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


在我的例子中,我正在测试的DLL被部署到GAC(BizTalk需求)。我已经创建了一个新类并正在测试它,但自从添加了测试中的类之后,就再也没有添加过DLL。

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

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


最后(!)我检查了项目属性中的程序集名称(右键单击项目,选择“属性”,选择“应用程序”选项卡),并将其更改为匹配默认名称空间,现在一切正常。

当我尝试添加具有相同主项目名称的测试项目时,我遇到了这种情况

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


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

我遇到了与Trey类似的问题,但我没有使用BizTalk,而是使用了SharePoint解决方案,该解决方案也使用了GAC部署。GAC有一个较旧的组件。当我通过收回溶液移除GAC组件时,测试通过了。

以防有人需要: 我在VisualStudio中创建了一个测试项目,我想知道为什么有些类即使VisualStudio反复要求我添加“System.Web”作为参考也找不到


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

遇到了同样的问题。以防万一,如果它对任何人都有帮助的话——我通过将nuget软件包NUnit3TestAdapter从3.13.0版降级到3.11.2版,成功地让它工作


你可以找到更多的信息-

这也发生在我身上。我在我的域项目上安装了一个版本为1.5的nuget软件包,但在我的单元测试项目上只有版本1.1。我通过更新单元测试项目上的版本以匹配域项目(正在测试的项目)上的版本来解决此问题。

程序集中未定义MySimpleClass,或者在加载时遇到问题。你能显示这个类的源代码吗?就像我说的,它在调试中运行良好。MySimpleClass的定义是什么并不重要;项目中的任何类都无法在运行模式下加载。我无法在此处安装任何代码,但我假设这是生成配置问题(或visual studio设置或其他问题),而不是代码问题。请尝试启用Fusion日志记录以查看此程序集的加载位置。仅供参考:我的项目名称不同。但是在设置中,程序集名称/默认名称空间是相同的。我有相同的问题-将一个项目重命名为不同的名称,然后使用旧名称创建另一个项目。谢谢你指出这一点@4年后,dknaack仍然在拯救生命!谢谢彼此彼此。谢谢你,阿米尔。我仍然不明白为什么.dll和.exe相同会导致错误,因为出于性能原因,.NET运行时假定
MyAssembly
驻留在
MyAssembly.dll
MyAssembly.exe
中(而不是扫描太多文件)。这是我的一个特点