是否有一种合理简单的方法来让FxCop检查我所有的程序集声明一个特定的属性值?我想确保每个人都更改了创建项目的默认值:
[assembly: AssemblyCompany("Microsoft")] // fail
[assembly: AssemblyCompany("FooBar Inc.")] // pass
一旦您知道FxCop的"最大"分析目标是一个模块,而不是一个程序集,这实际上是一个非常简单的规则。在大多数情况下,每个程序集只有一个模块,所以这不会造成问题。但是,如果由于每个程序集有多个模块而导致每个程序集收到重复的问题通知,则可以添加检查以防止每个程序集生成多个问题。
无论如何,下面是该规则的基本实现:
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;
}