2011-11-11 10 views
5

FxCop에서 모든 어셈블리가 특정 특성 값을 선언하는지 확인하는 방법은 비교적 간단합니까? 나는 프로젝트를 만드는 모든 사람이 당신이 얻을 기본값을 변경 만들고 싶어 : 당신의 FxCop의 "큰"분석 대상이 모듈이 아니라 어셈블리 것을 알고 일단FxCop : 어셈블리 정보 값을 확인하는 사용자 지정 규칙

[assembly: AssemblyCompany("Microsoft")] // fail 

[assembly: AssemblyCompany("FooBar Inc.")] // pass 

답변

4

이 실제로 꽤 쉽게 규칙입니다. 대부분의 경우 어셈블리 당 하나의 모듈이 있으므로 문제가되지 않습니다. 그러나 어셈블리 당 여러 개의 모듈이 있기 때문에 어셈블리마다 중복 된 문제 알림이 표시되는 경우 어셈블리 당 하나 이상의 문제가 발생하지 않도록 검사를 추가 할 수 있습니다.

private TypeNode AssemblyCompanyAttributeType { get; set; } 

public override void BeforeAnalysis() 
{ 
    base.BeforeAnalysis(); 

    this.AssemblyCompanyAttributeType = FrameworkAssemblies.Mscorlib.GetType(
              Identifier.For("System.Reflection"), 
              Identifier.For("AssemblyCompanyAttribute")); 
} 

public override ProblemCollection Check(ModuleNode module) 
{ 
    AttributeNode assemblyCompanyAttribute = module.ContainingAssembly.GetAttribute(this.AssemblyCompanyAttributeType); 
    if (assemblyCompanyAttribute == null) 
    { 
     this.Problems.Add(new Problem(this.GetNamedResolution("NoCompanyAttribute"), module)); 
    } 
    else 
    { 
     string companyName = (string)((Literal)assemblyCompanyAttribute.GetPositionalArgument(0)).Value; 
     if (!string.Equals(companyName, "FooBar Inc.", StringComparison.Ordinal)) 
     { 
      this.Problems.Add(new Problem(this.GetNamedResolution("WrongCompanyName", companyName), module)); 
     } 
    } 

    return this.Problems; 
} 
+0

멋진, 감사 : 어떤 속도에서

, 여기에 규칙의 기본 구현입니다! –