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

添加NUnit测试项目遇FileNotFoundException:无法加载CommonLibrary程序集

问题原因及解决方案

核心原因:跨框架程序集加载不兼容

你的测试项目基于.NET 8(属于.NET Core/.NET 5+生态),而目标测试项目MyProject_VM和依赖的CommonLibrary.dll都是基于.NET Framework 4.8编译的。这两个框架的程序集解析逻辑完全不同:.NET 8运行时无法按照.NET Framework的加载规则找到并加载专属的程序集,哪怕你直接引用了该库,也会因为框架环境不匹配导致加载失败。

修改<Private>属性无效的原因

<Private>属性仅控制程序集是否被复制到输出目录,但你的问题本质是框架兼容性不匹配,而非程序集是否存在于输出目录。就算程序集被复制过去,.NET 8运行时也无法正确识别并加载.NET Framework专属的程序集。

可行解决办法

  • 将测试项目改为.NET Framework 4.8
    直接把NUnit测试项目的目标框架切换为.NET Framework 4.8,让测试环境和目标项目的运行环境完全一致,程序集加载逻辑就能匹配。操作步骤:右键测试项目→属性→应用程序→目标框架,选择.NET Framework 4.8,重新引用MyProject_VM和CommonLibrary即可,无需修改<Private>属性。

  • 迁移CommonLibrary到.NET Standard 2.0
    如果必须保留测试项目为.NET 8,可将CommonLibrary的目标框架改为.NET Standard 2.0(该版本同时兼容.NET Framework 4.8和.NET 8)。这样两个项目都能正常加载该程序集,从根源解决框架不兼容问题。注意:迁移前要检查CommonLibrary是否使用了.NET Framework专属API(如System.Web、WPF旧特性等),如有需替换为兼容的替代方案。

  • 手动指定程序集加载路径(临时方案)
    若暂时无法修改框架或迁移库,可在测试的OneTimeSetUp阶段手动添加程序集搜索路径:

    [OneTimeSetUp]
    public void Setup()
    {
        // 替换为CommonLibrary.dll所在的实际路径,例如MyProject_VM的输出目录
        var libraryPath = Path.Combine(Directory.GetParent(Environment.CurrentDirectory).Parent.Parent.FullName, "MyProject_VM", "bin", "Debug", "net48");
        AppDomain.CurrentDomain.AppendPrivatePath(libraryPath);
    }
    

    该方法较为脆弱,项目结构或输出路径变化后会失效,仅适合临时测试使用。

内容的提问来源于stack exchange,提问作者Jean-David Lanz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 20:09:53