Насколько я вижу, нет возможности включить [SuppressMessage] в Жандарме (в 2.8). Я взял последний источник с GitHub, потому что он не работал, как описано.
В коде есть SupressMessageEngine, и есть тесты, выполняющие его через ручное переопределение Runner.Engines.Subscribe. Но [EngineDependency (typeof (SuppressMessageEngine))]] не применяется ко всем скомпилированным правилам, так как он подписывается, когда Gendarme фактически выполняется.
Я также посмотрел на источник, чтобы найти способ всегда подписываться на конкретный движок через config - но его нет.
Я могу ошибаться, но похоже, что они забыли вернуться и применить соответствующие атрибуты EngineDependency.
Единственный «обходной путь», о котором я могу подумать, - это написать собственное правило, которое при вызове добавляет подписку SuppressMessageEngine и больше ничего не делает. Да, но это должно работать на основе того, что я видел в их коде.
К вашему сведению - только что реализовал это. Вам необходимо создать собственное пользовательское правило, импортировать Mono.Cecil и Gendarme.Framework и целевой .NET Framework 3.5
using Gendarme.Framework;
using Gendarme.Framework.Engines;
namespace MyRules
{
[Problem("Gendarme devs forgot to attribute rules with SuppressMessageEngine")]
[Solution("Include this rule")]
[EngineDependency(typeof(SuppressMessageEngine))]
public class AddSuppressMessageSupportRule : Rule {}
}
К сожалению, это не будет вытягивать атрибуты FxCopCompatibility, которые находятся там (то есть SupressMessage для правила FxCop, которое соответствует правилу жандарма, также подавит правило жандарма), но, по крайней мере, позволяет использовать имена жандармов для подавления.