2010-07-09 3 views
1

어셈블리 "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; 
    } 

: 유형을 기준으로 관련되는 경우

+0

+1 이전 버전에서 해결책을 찾았을 때 내 발걸음을 되돌리고 답변을 게시하려고합니다. – Maslow

답변

0

이 트릭을 할해야 InitializeComponent()에 팀 표준으로 설정됩니다.

관련 문제