Не удается подавить предупреждение FxCop CA1062

c # /. net / fxcop!

... внутри класса я хочу, чтобы FxCop заткнулся, жалуясь на

Warning CA1062 : Microsoft.Design : 
In externally visible method 'xyz', validate parameter 'a' before using it. 

По сути, это правило предполагает, что я ставлю if (a == null) throw new ArgumentNullException("a"); в начале почти каждого метода в моем коде. Это отстой и меняет логику обработки исключений.

Итак, я поместил это где-то в тело своего класса:

[SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods",
     Scope = "Type", 
     MessageId = "0", 
     Justification = "We love danger... so far.")]

Во всяком случае, это даже не подавляет ни одного сообщения - я все равно получаю все эти предупреждения. Он подавляет предупреждение только в том случае, если он стоит прямо над одним из определений метода, допускающего ошибки (то есть подавляет только одно отдельное предупреждение, а не все этого типа). Странно то, что один и тот же синтаксис работает для других проблем, которые возникают в моем классе несколько раз.

Я не знаю, что делаю не так, и, честно говоря, не совсем понимаю, как использовать параметры атрибута .. http://msdn.microsoft.com/de-de/library/ms244717.aspx не вдавался в подробности. : T ... во всяком случае, есть идеи, что не так?


person Efrain    schedule 27.04.2011    source источник
comment
Хотя это не дубликат, он также может решить вашу проблему: stackoverflow.com/questions/35551/ Посмотрите ответ там, держу пари, это поможет   -  person taylonr    schedule 27.04.2011
comment
Почему бы вам не подавить эти предупреждения в настройках свойств проекта.   -  person    schedule 29.05.2013


Ответы (1)


Вы хотите подавить сообщение для всех классов или только для одного класса? В первом случае вы можете отключить правило. (Точный механизм для этого зависит от того, как вы используете FxCop, поэтому просьба предоставить подробности, если вам нужна помощь с этим.)

В последнем случае вам нужно будет добавить атрибут SuppressMessage по крайней мере для каждого метода, в котором обнаружена проблема. Причина этого в том, что FxCop ищет подавления только в отношении цели нарушения. Подавление, добавленное к «родительскому» элементу (например, классу, которому принадлежит метод), никогда не проверяется FxCop при попытке определить, было ли подавлено нарушение.

У вас действительно есть некоторая гибкость в отношении того, где вы размещаете подавление в своем коде, если вы используете атрибут Target, но это не меняет необходимости в одном атрибуте подавления для каждой цели нарушения.

person Nicole Calinoiu    schedule 27.04.2011
comment
Спасибо! И что ж ... это довольно неубедительно, потому что мой класс - это тип данных с примерно 50 методами. Мне нужно разместить их перед каждым определением метода. : T ... это c #; все функции, которые я использую, взяты из .net и на самом деле сами генерируют правильные исключения. Так что да, поскольку я все равно мало думаю об этом правиле, я, вероятно, отключу правило для всего решения. - person Efrain; 28.04.2011