我试图排除interop结构(具有显式结构布局的结构)以及#34; dead field"来自NDepend的警告。我添加属性过滤器的查询如下所示:
warnif count > 0
from f in JustMyCode.Fields where
f.NbMethodsUsingMe == 0 &&
!f.IsPublic &&
!f.IsLiteral &&
!f.IsEnumValue &&
f.Name != "value__" &&
!f.ParentType.HasAttribute("System.Runtime.InteropServices.StructLayoutAttribute") &&
!f.IsGeneratedByCompiler
但NDepend会抱怨StructLayoutAttribute不是有效的类型名称。 mscorlib列在ndproj文件中的<FrameworkAssemblies>
下。
在使用mscorlib中的系统类型时,我注意到默认规则集中的许多规则都有AllowNoMatch()
。例如,有关DllImport的规则使用
m.HasAttribute ("System.Runtime.InteropServices.DllImportAttribute".AllowNoMatch()) &&
这是什么意思?当用户没有在<FrameworkAssemblies>
列表中引用mscorlib时,是否可以阻止规则窒息?或者我误解了NDepend如何实际解决第三方类型的问题?
我添加.AllowNoMatch()
不再存在语法错误,但当然规则现在将我的struct字段报告为未使用。