netcore3.1 和 Nunit

问题描述

我在 netcore3.1 应用程序中加载程序集时遇到问题(即 ReflectionTypeLoadExceptions),特别是在使用“NUnit.ConsoleRunner.NetCore --version 3.12-beta2”加载依赖于其他程序集 copyLocal 的单元测试程序集时尽管所有程序集都在同一目录中,但项目引用的设置为 false。

当针对特定引用将 copyLocal 设置为 false 时,.deps.json 文件将不包含由 AssemblyLoadContext 直接加载依赖项所需的所有条目,因此会触发 AssemblyLoadContext.Resolving 回调/事件,但未在 nunit 中处理,或处理不当。 ReflectionTypeLoadException 稍后会在 nunit 调用 assembly.GetTypes() 时抛出。

可以在此处找到该问题的简单演示:https://github.com/Ian144/NunitAssemblyLoadIssue.git,其中包括使用自定义 AssemblyLoadContext 来演示该问题的控制台应用程序,或者如果“NUnit.ConsoleRunner.NetCore --version 3.12-beta2 ”已安装,只需从输出目录运行“nunit AssemblyA.dll”。在演示中,AssemblyA 包含 nunit 测试,并且有一个对 AssemblyB 的项目引用,其中 copyLocal 设置为 false。

那么,应该处理 AssemblyLoadContext.Resolving 事件的 nunit netcore runner 是否存在问题?或者在这种情况下有没有其他方法可以让程序集加载工作?

谢谢,伊恩

解决方法

release notes 中突出显示了 beta2 版本中程序集加载的一些已知问题。

好消息是,我们刚刚合并了一个我们认为可能会修复它的拉取请求。下面有一个指向拉取请求的链接,其中还提供了在哪里可以找到更新版本的详细信息,并呼吁人们尝试一下。如果您能试一试并告诉我们进展如何,我们将不胜感激! ?

https://github.com/nunit/nunit-console/pull/942

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...