我在程序集“A”中有基类型“Base”,在程序集“B”中有派生类型“Child”。
我正在使用FxCop来查找从“Base”派生的程序集“B”类型,如下所示:
var baseAssemblyNode = AssemblyNode.GetAssembly("A.dll"), true, true, false);
var baseType = baseAssemblyNode.Types.Single(t => t.Name.Name == "Base");
var assemblyNode = AssemblyNode.GetAssembly("B.dll"), true, true, false);
var derivedTypes = assemblyNode.Types.Where(t => t.IsDerivedFrom(baseType));
但结果集合是空的。
我手动找到了“Child”类型,发现它的基本类型不等于找到“Base”类型。
预计这些类型节点是不同的对象,但在Name属性中有深度 它们具有相同的UniqueKey和Name - 我希望FxCop通过这些属性对IsDerivedMethod中的类型进行比较。但它不起作用。
有什么方法可以解决这个问题?
答案 0 :(得分:0)
如果类型与引用相关,那么应该这样做:
public override ProblemCollection Check(TypeNode type)
{
var winFormsReference=type.DeclaringModule.ContainingAssembly.AssemblyReferences
.SingleOrDefault(ar => ar.Assembly.Name.StartsWith("System.Windows.Forms"));
if (winFormsReference==null)
return null;
var controlType=winFormsReference.Assembly.Types.Single(t => t.FullName=="System.Windows.Forms.Control");
_currentTypeFullName=type.FullName;
if (type.IsDerivedFrom(controlType)==false||_shouldCheckType(type)==false)
return null;
var initializer = type.Members.OfType<Method>( ).SingleOrDefault(x => x.Name.Name=="InitializeComponent");
if (initializer==null)
Problems.Add(new Problem(NotSetResolution( ), type));
else
VisitMethod(initializer);
return Problems;
}
这是我用来查找从System.Windows.Forms.Control继承的所有类,然后确保将某些属性设置为InitializeComponent()
中的团队标准。