FxCop: пользовательское правило для проверки значений информации сборки - PullRequest
5 голосов
/ 11 ноября 2011

Есть ли достаточно простой способ заставить FxCop проверить, что все мои сборки объявляют определенное значение атрибута?Я хочу убедиться, что все изменили настройки по умолчанию, которые вы получаете при создании проекта:

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

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

1 Ответ

4 голосов
/ 11 ноября 2011

Это довольно простое правило, если вы знаете, что «самая большая» цель анализа 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...