2014-06-19 10 views
2

사용자 지정 fxcop 규칙을 개발하여 기본 클래스 이름으로 끝나는 파생 클래스의 이름을 확인하려고합니다.파생 클래스의 이름을 확인하는 Fxcop 사용자 지정 규칙이 기본 클래스 이름으로 끝납니다

내 주요 관심사는 Fxcop.Sdk에 특정 클래스가 기본 클래스에서 파생되었는지 여부를 알 수있는 속성이 있습니까? 그렇다면 어떻게?

이 규칙을 어떻게 구현할 수 있습니까?

답변

2

예, 가능합니다. 다음 이미지를 살펴 보자 : 당신이 여기에서 보는 것은 당신의 FxCop 규칙을 개발할 수있는 도구입니다 introspector에서 스크린 샷입니다

enter image description here

.

각 클래스에서 볼 수 있듯이 BaseTypeBaseClass 속성이 있습니다. 클래스를 사용하여 클래스가 상속하는지 검사 할 수 있습니다.

내부 검사 모델에서 예를 들어 아무것도 파생되지 않은 클래스는 Object에서 파생 된 것으로 표시됩니다.

당신은 사람들을 건너 (그리고 다른 가능한 오류) 수 : 같은 요구를 들어

public override ProblemCollection Check(TypeNode type) 
{ 
    ClassNode classNode = type as ClassNode; 
    if (classNode == null) 
     return; 
    if (classNode.BaseType == null) 
     return; 
    if (classNode.BaseType == FrameworkTypes.Object) 
     return; 

    // Namechecking logic 

    return Problems; 
} 
+0

VS Studio에서 Fxcop.Sdk에 Object에 대한 defination이 포함되지 않은 NodeType.Object의 세 번째 조건문에 오류가 표시됩니다. – TUSWAY

+0

사실 나는 그것을 모자 위쪽에서 썼다. 나는 나의 대답을 편집 할 것이다. – Matthijs

+0

자, 가야합니다. – Matthijs

0

, 당신의이 C#의 LINQ 쿼리를 통해 .NET 코드에 대한 사용자 지정 코드 규칙을 작성할 수 도구 NDepend를 사용할 수 있습니다. 면책 조항 :

// <Name>Derived class name must ends with base class name</Name> 
warnif count > 0 
from t in Application.Types 
where t.IsClass 
let baseClass = t.BaseClass 
where !baseClass.IsThirdParty // Skip all .NET Fx base classes, like System.Object 
where !t.SimpleName.EndsWith(baseClass.SimpleName) 
select new {t, baseClass } 
: 나는

예를 들어, 기본 클래스 이름로 끝나는 파생 클래스의 검사 이름에 사용자 정의 규칙을 작성하는이 도구의 개발자 중 하나입니다, 그것만큼 간단합니다

이러한 규칙은 Visual Studio 내에서 실시간으로 편집하고 각 키 입력 후 즉시 컴파일/실행할 수 있습니다. 200 of such LINQ query rules

enter image description here

은, 기본적으로 제공됩니다. CI 프로세스 중에 생성 된 규칙 위반 can be seen live in VisualStudio 또는 in a report.