Nunit-console 3.7.0参数错误求助:Jenkins节点升级后测试执行失败
解决NUnit Console 3.7.0升级后的参数错误(E_INVALIDARG)问题
你遇到的这个参数不正确。(异常来自 HRESULT: 0x80070057 (E_INVALIDARG))错误,并不是因为命令参数本身不被支持,而是NUnit 3.7.0版本的引擎在加载测试DLL时的AppDomain安全证据处理逻辑存在兼容性问题。结合你的日志和操作尝试,给你几个针对性的解决方案:
关闭影子复制功能
NUnit 3.7.0的影子复制机制在部分环境下会和系统安全策略冲突,导致加载DLL时抛出参数错误。你可以在命令中添加--shadowcopy=false参数禁用该功能,修改后的命令如下:"E:\tools\NUnit.Console-3.7.0\nunit3-console.exe" --shadowcopy=false --result="unittests.xml;format=nunit2" "EplanImporterTests\bin\Debug\EplanImporterTests.dll" [其他DLL路径]缩短测试DLL的路径长度
Windows传统的260字符路径长度限制可能会触发这类加载错误,从你的日志看,工作空间路径已经较长。你可以尝试:- 缩短Jenkins工作空间的名称(比如把
NunitUpdateedbae018改为更简短的命名) - 修改测试项目的输出路径,将DLL生成到层级更少的目录下
- 缩短Jenkins工作空间的名称(比如把
升级到NUnit Console 3.7.1或更高版本
这个AppDomain加载的bug在NUnit Console 3.7.1版本中已经被官方修复,你可以跳过3.7.0直接升级到3.7.1或者更稳定的3.8+/3.9+版本,无需降级测试项目引用的NUnit NuGet包(保持3.9版本即可)。验证测试DLL的完整性与权限
- 清理Jenkins工作空间后重新构建测试项目,确保生成的DLL文件没有损坏
- 检查Jenkins运行账号对测试DLL所在目录的访问权限,确保拥有读取和执行权限
如果以上方法都无效,你还可以尝试添加--domain=none参数,强制NUnit在当前AppDomain中运行测试(注意:该参数会降低测试的隔离性,仅作为临时排查手段):
"E:\tools\NUnit.Console-3.7.0\nunit3-console.exe" --domain=none --result="unittests.xml;format=nunit2" [DLL列表]
内容的提问来源于stack exchange,提问作者Nick Otten
相关产品推荐
相关产品推荐

