어셈블리 "A"에 기본 형식이 있고 어셈블리 "B"에 파생 형식 "Child"이 있습니다.FxCop TypeNode.IsDerivedFrom 메서드가 다른 어셈블리의 형식에 대해 예기치 않게 작동합니다.
이 같은 "자료"에서 파생 조립품 "B"종류에서 찾을 수의 FxCop을 사용하고:
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"유형과 일치하지 않음을 확인했습니다.
이러한 유형의 노드가 다른 개체이기는하지만 이름 속성 의 깊이있는 고유 한 UniqueKey 및 이름이 예상됩니다. FxCop이 이러한 속성별로 IsDerivedMethod의 형식 비교를 수행 할 것으로 예상했습니다. 그러나 그것은 효과가 없습니다.
이 문제를 해결하기위한 옵션은 무엇입니까? 이것은 내가 System.Windows.Forms.Control에서 상속하는 모든 클래스를 찾은 다음 특정 속성을 보장하기 위해 사용하고 무엇
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;
}
: 유형을 기준으로 관련되는 경우
+1 이전 버전에서 해결책을 찾았을 때 내 발걸음을 되돌리고 답변을 게시하려고합니다. – Maslow