2011-11-11 28 views
5

Có cách nào đơn giản hợp lý để FxCop kiểm tra xem tất cả các assembly của tôi có khai báo giá trị thuộc tính cụ thể không? Tôi muốn chắc chắn tất cả mọi người đã thay đổi mặc định bạn có được vào việc tạo ra một dự án:FxCop: quy tắc tùy chỉnh để kiểm tra giá trị thông tin lắp ráp

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

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

Trả lời

4

Đây thực sự là một quy tắc khá dễ dàng khi bạn biết rằng "lớn nhất" phân tích mục tiêu FxCop là một mô-đun, không phải là một lắp ráp. Trong hầu hết các trường hợp, có một mô-đun cho mỗi hội đồng, do đó, điều này sẽ không gây ra một vấn đề. Tuy nhiên, nếu bạn đang nhận được thông báo vấn đề trùng lặp cho mỗi hội đồng bởi vì bạn có nhiều mô-đun cho mỗi hội đồng, bạn có thể thêm một kiểm tra để ngăn chặn tạo ra nhiều hơn một vấn đề cho mỗi hội đồng.

Dù sao đi nữa, đây là việc thực hiện cơ bản của quy tắc:

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

tuyệt vời, cảm ơn! –

Các vấn đề liên quan