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

如何在NDepend中忽略所有外部程序集?

嗨,完全懂你的烦恼——本来想专心梳理自己的代码,结果一堆外部NuGet包或者系统DLL的规则警告跳出来,像Microsoft.Office那些明明微软自己没遵守接口命名规范,却给我们添了几百条噪音,太闹心了!

你提到已经用了JustMyCode域但没效果,其实NDepend提供了更灵活的方式来批量标记所有外部程序集为NotMyCode,不用手动维护冗长的程序集列表,下面给你一步步说怎么做:

1. 创建自定义NotMyCode查询,自动排除所有外部依赖

打开NDepend的Code Query & Rules Editor,新建一个查询,粘贴下面的CQLinq代码:

// <Name>标记所有外部程序集为NotMyCode</Name>
// <Description>自动识别并排除非自有代码的程序集,包括NuGet包、系统DLL等</Description>
from assembly in Assemblies
where 
  // 排除不是由本地源代码构建的程序集
  !assembly.IsBuiltFromSourceCode 
  // 同时排除NuGet包中的程序集
  || assembly.IsNuGetPackageAssembly
  // 可以额外添加特定前缀的系统DLL,比如Microsoft.Office系列
  || assembly.Name.StartsWith("Microsoft.Office.")
select assembly

右键这个查询,选择Set as a NotMyCode Definition Query——这样NDepend就会把所有匹配到的程序集标记为NotMyCode,后续所有规则分析都会跳过它们。

2. 验证自有代码范围是否正确

为了确保设置生效,你可以跑一个简单的查询来确认哪些是MyCode:

from a in Assemblies where a.IsMyCode select a

检查结果应该只有你自己项目的程序集,没有外部NuGet或系统DLL的影子。

3. 给个别规则补加MyCode过滤(可选但保险)

有些旧规则或者自定义规则可能没默认包含MyCode过滤,你可以直接编辑规则代码,加上IsMyCode条件。比如那个“接口名称应以‘I’开头”的规则,修改后应该是:

// <Name>接口名称应以‘I’开头</Name>
from i in Interfaces where i.IsMyCode && !i.Name.StartsWith("I")
select i

这样就只会检查你自己写的接口,彻底屏蔽外部代码的干扰。

小提示

如果之后新增了外部NuGet包,这个自定义查询会自动识别并排除它们,不用手动更新列表——是不是比维护精确程序集全名省心多了?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:43:23