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

NetArchTest分层架构测试异常:依赖检测结果始终返回False

排查NetArchTest依赖检测始终返回False的问题

针对你遇到的NetArchTest.Rules无论使用ShouldNot还是Should都返回False的问题,给出以下具体排查步骤:

  • 确认目标程序集已正确加载
    Types.InCurrentDomain()依赖当前AppDomain加载的程序集,如果测试项目未直接引用Flux.Access.Assets或其他Access项目,或者这些项目的输出dll未被复制到测试项目的运行目录,就会导致没有匹配到任何类型,测试自然返回False。建议替换为明确指定程序集的方式:

    Types.FromAssembly(typeof(Flux.Access.Assets.某个类).Assembly)
    

    确保能精准定位到目标程序集。

  • 检查隐式间接依赖
    即使没有项目级引用,也可能存在隐式依赖:

    • 检查Flux.Access.Common是否引用了其他Access项目(Blob/Configurations/Members),如果Common依赖这些项目,Assets通过引用Common会间接产生依赖链;
    • 查看Assets项目的输出目录(bin/debug/release),确认是否存在其他Access项目的dll,可能是通过其他依赖项被复制过来的;
    • 排查是否有通过反射、动态加载等方式引用了其他Access项目的类型。
  • 验证命名空间匹配规则
    ResideInNamespace默认是精确匹配命名空间,如果Assets项目中有类型位于子命名空间(比如Flux.Access.Assets.Utils),这些类型不会被检测到。可以添加第二个参数开启包含子命名空间的匹配:

    .ResideInNamespace(AssetsNamespace, true)
    

    同时确认所有需要检测的类型确实属于Flux.Access.Assets命名空间。

  • 查看测试失败的具体详情
    不要只依赖IsSuccessful结果,获取失败信息能直接定位问题:

    var testResult = Types
        .InCurrentDomain()
        .That()
        .ResideInNamespace(AssetsNamespace)
        .ShouldNot()
        .HaveDependencyOnAny(otherProjects)
        .GetResult();
    
    // 打印所有失败项
    foreach (var failure in testResult.Failures)
    {
        Console.WriteLine(failure);
    }
    Assert.True(testResult.IsSuccessful);
    

    失败信息会告诉你是哪些类型违反了规则,或者根本没有匹配到任何类型,这是排查的关键。

  • 清理并重新构建解决方案
    旧的dll缓存可能导致检测错误:

    • 清理解决方案(右键解决方案 -> 清理);
    • 删除所有项目的bin和obj目录;
    • 重新构建整个解决方案,确保所有输出都是最新的。
  • 检查NetArchTest版本兼容性
    部分版本可能存在bug,尝试升级NetArchTest.Rules到最新稳定版,或者回退到已知稳定的版本,验证问题是否消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 06:53:14