Получить FxCop для подавления предупреждений для всего типа? - PullRequest
11 голосов
/ 15 июля 2010

Как я могу подавить предупреждения FxCop для всего типа?

namespace ConsoleApplication1
{     
    public static class Serializer<T>
    {
        public static string Serialize(T obj)
        {
            return string.Empty;
        }

        public static T Deserialize(string str)
        {
            return default(T);
        }
    }

Я пробовал это, но у меня это не работает:

[assembly: SuppressMessage("Microsoft.Design",
    "CA1000:DoNotDeclareStaticMembersOnGenericTypes", Scope = "Type",
    Target = "ConsoleApplication1.Serializer'1")]

1 Ответ

10 голосов
/ 16 июля 2010

К сожалению, это не будет работать. FxCop обрабатывает только те подавления, которые объявлены для той же цели, что и обнаруженное нарушение. Если он обнаруживает нарушение в вашем методе Serialize, единственными SuppressMessage атрибутами, которые «скрывают» это нарушение, являются либо объявленные в самом методе, либо свойство, свойство Target которого определяет метод.

Если вы хотите подавить нарушение CA1000 для каждого из ваших статических методов в классе Serializer<T>, вам нужно будет сделать это, создав атрибут SuppressMessage для каждого из этих методов.

@ Мэтт Фаус : Какой смысл в аргументе Scope тогда?

Аргумент Scope позволяет FxCop знать, что представляет собой аргумент Target. Например, если Target равно "A.B.C", относится ли это к пространству имен с именем A.B.C или к классу с именем C в пространстве имен A.B? Scope, вероятно, должно быть названо как-то как TargetKind, но это, к сожалению, не меняет того, что оно на самом деле представляет ...

Также см. этот ответ .

...