使用NUnit调试测试时遇System.TypeLoadException异常求助
我之前也碰到过一模一样的问题,大概率是NUnit组件版本不兼容导致的,尤其是ReSharper内置的NUnit Runner和项目中引用的NUnit Engine版本不匹配。下面是几个实测有效的解决办法:
统一NUnit相关包的版本
打开NuGet包管理器,把项目中所有和NUnit相关的包(比如NUnit、NUnit3TestAdapter、NUnit.Engine)都升级到同一个稳定版本,优先选择最新的长期支持(LTS)版本。如果你的项目手动引用了nunit.engine,建议直接移除这个引用,让测试适配器自动管理依赖,避免版本冲突。清理ReSharper缓存
ReSharper的缓存有时候会残留旧版本的组件元数据,导致接口匹配异常:- 打开ReSharper菜单 → 选择「Options」
- 找到「Environment → General」选项
- 点击「Clear Caches」按钮,等待清理完成后重启Visual Studio,再重新运行测试。
检查测试项目的目标框架兼容性
报错信息中提到了TargetFramework相关方法,确认你的测试项目目标框架(如.NET Framework 4.x/.NET 6/.NET Core 3.1等)与所使用的NUnit版本完全兼容。比如旧版NUnit 3.6.x可能不支持较新的.NET Core/.NET 5+版本,此时需要升级NUnit到支持对应框架的版本。切换到官方NUnit测试运行器
如果ReSharper内置的Runner始终存在兼容性问题,可以尝试改用Visual Studio默认的测试运行器:- 在NuGet中安装最新版的
NUnit3TestAdapter - 打开Visual Studio的「Test Explorer」,选择使用默认测试运行器(而非ReSharper)来执行测试。
- 在NuGet中安装最新版的
报错信息参考:
2019.04.09 14:56:12.490 ERROR System.TypeLoadException: Il metodo 'get_TargetFramework' del tipo 'NUnit.Engine.Extensibility.ExtensionNode' dell'assembly 'nunit.engine, Version=3.6.1.0, Culture=neutral, PublicKeyToken=2638cd05610744eb' non ha un'implementazione.
System.TypeLoadException: Il metodo 'get_TargetFramework' del tipo 'NUnit.Engine.Extensibility.ExtensionNode' dell'assembly 'nunit.engine, Version=3.6.1.0, Culture=neutral, PublicKeyToken=2638cd05610744eb' non ha un'implementazione.
in NUnit.Engine.Services.ExtensionService..ctor()
in NUnit.Engine.TestEngine.Initialize()
in NUnit.Engine.TestEngine.GetRunner(TestPackage package)
in JetBrains.ReSharper.UnitTestRunner.nUnit30.BuiltInNUnitRunner.<>c__DisplayClass6_0.b__0()
in JetBrains.ReSharper.UnitTestRunner.nUnit30.BuiltInNUnitRunner.WithExtensiveErrorHandling(IRemoteTaskServer server, Action action)
内容的提问来源于stack exchange,提问作者Mattia Caruso

