You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NUnit.AssemblyHooks中TestRunnerManager.OnTestRunStart无法加载项目程序集问题

解决思路
  • 处理程序集探测路径不匹配问题
    你确认dll存在于当前目录但加载失败,本质是.NET程序集默认探测路径不包含当前工作目录,或是NUnit开启了卷影复制导致运行时路径和编译输出路径不一致。无需修改SpecFlow自动生成的代码,直接在测试项目中新增自定义全局SetUpFixture,提前注册程序集解析事件即可:
using NUnit.Framework;
using System;
using System.IO;
using System.Reflection;

[SetUpFixture]
public class TestAssemblyResolver
{
    [OneTimeSetUp]
    public void PreInitialize()
    {
        AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
        {
            var asmName = new AssemblyName(args.Name).Name + ".dll";
            var asmPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, asmName);
            return File.Exists(asmPath) ? Assembly.LoadFrom(asmPath) : null;
        };
    }
}
  • 检查版本适配一致性
    确认项目中所有SpecFlow相关包(SpecFlow、SpecFlow.NUnit、SpecFlow.Tools.MsBuild.Generation)版本完全一致,你当前使用的SpecFlow 3.5.14建议搭配NUnit 3.12~3.17版本、NUnit3TestAdapter 3.17~4.2版本,版本不匹配会触发内部程序集加载逻辑异常。

  • 校验SpecFlow配置与程序集名匹配
    检查项目根目录下的specflow.json或者App.config中的SpecFlow配置,是否手动指定了testAssemblyName参数,如果配置的名称和你项目实际生成的程序集名称不符,就会出现报缺失的dll实际存在的问题,修正配置后清理项目重新生成即可。

  • 关闭NUnit卷影复制
    如果是用控制台运行测试,在运行命令中添加--shadowcopy=False参数;如果是用VS测试资源管理器运行,在测试运行配置(.runsettings)中添加<ShadowCopyFiles>False</ShadowCopyFiles>配置,避免卷影复制后运行目录缺失依赖dll。

内容的提问来源于stack exchange,提问作者aleksefy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 10:15:03