我有几个包含很多值的枚举,我知道大部分都没有使用。
我尝试编写NDepend CQLinq查询以返回我的代码库中使用的枚举值。在找到this SO问题后,我的查询基于one of the default queries provided by NDepend:
// <Name>Used enum values</Name>
warnif count > 0
from f in JustMyCode.Fields where
f.ParentNamespace.Name == "My.Namespace" &&
f.NbMethodsUsingMe > 0 &&
f.IsPublic && // Although not recommended, public fields might be used by client applications of your assemblies.
f.IsEnumValue && // The IL code never explicitely uses enumeration value.
f.Name != "value__" && // Field named 'value__' are relative to enumerations and the IL code never explicitely uses them.
!f.HasAttribute("NDepend.Attributes.IsNotDeadCodeAttribute".AllowNoMatch()) &&
!f.IsGeneratedByCompiler // If you don't want to link NDepend.API.dll, you can use your own IsNotDeadCodeAttribute and adapt this rule.
select f
但是,NDepend认为没有使用任何枚举值。我一更换
f.NbMethodsUsingMe > 0 &&
与
f.NbMethodsUsingMe == 0 &&
列出了我的所有枚举值,这就是我知道查询的所有其他条款都没问题的方法。
我确实注意到原始查询的这两条评论:
f.IsEnumValue && // The IL code never explicitely uses enumeration value.
f.Name != "value__" && // Field named 'value__' are relative to enumerations and the IL code never explicitely uses them.
这可能意味着NDepend无法检测到枚举值的用法。
有谁知道这是否是NDepend的限制?或者甚至更好,达到我想要的方式?
谢谢!