2011-11-11 34 views
5

Tüm derlemlerimin belirli bir özellik değeri bildirip bildirmediğini kontrol etmek için FxCop'u almanın makul bir yolu var mı? Bir proje oluşturma konusunda herkesin Alacağınız varsayılan değişti yapmak istiyorum: Eğer FxCop yönettiği "büyük" analiz Hedef bir modül değil, bir montaj olduğunu öğrendikten sonraFxCop: montaj bilgisi değerlerini kontrol etmek için özel kural

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

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

cevap

4

Bu aslında oldukça kolay bir kuraldır. Çoğu durumda, montaj başına bir modül vardır, bu yüzden bir sorun teşkil etmez. Ancak, derleme başına çoğaltılamaz sorun bildirimleri alıyorsanız, derleme başına birden çok modülünüz varsa, her grup için birden fazla sorun oluşturmayı önlemek için bir denetim ekleyebilirsiniz.

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

süper, teşekkürler: Her halükarda

, burada kural temel uygulama var! –