特定のジェンダーム欠陥メッセージを抑制することは可能ですか? フラグなどを使用してソースコードでこれを行いたいと思います。
3 に答える
poupouがすでに述べたように、バージョン2.10は[SuppressMessage]属性をサポートします。
たとえば、AvoidNonAlphanumericIdentifierRuleルールを抑制するには、次のようにします。
[SuppressMessage("Gendarme.Rules.Naming", "AvoidNonAlphanumericIdentifierRule")]
protected void Application_Start()
{
...
}
ルールが存在するアセンブリの名前を指定する必要があることに注意してください...この場合、AvoidNonAlphanumericIdentifierRuleはGendarme.Rules.Naming.dllに存在します。ルールとそのアセンブリ名の完全なリストはここにあります。
コンソール ランナーを使用する場合は、欠陥ファイル (アウト オブ ソース) を使用して、メソッド、型、またはアセンブリの欠陥を抑制することができます。
新しい Gendarme 2.8 には、[SuppressMessage] 属性 (fxcop と同じ) に対する基本的な (読み取りが不完全でバグのある) サポートがあります。2.10 がリリースされたら、この機能が適切に動作することを期待してください。
私が見る限り、Gendarme (at 2.8) で [SuppressMessage]を有効にする方法はありません。説明どおりに機能していなかったため、GitHub から最新のソースを取得しました。
SupressMessageEngine はコード内にあり、Runner.Engines.Subscribe の手動オーバーライドを介してそれを実行するテストがあります。しかし、[EngineDependency (typeof(SuppressMessageEngine))] は、コンパイルされたすべてのルールに適用されるわけではありません。これは、Gendarme が実際に実行されるときにサブスクライブされる方法です。
また、ソースを調べて、構成を介して特定のエンジンを常にサブスクライブする方法を見つけましたが、何もありません。
私は間違っているかもしれませんが、彼らが戻って適切な 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 属性を取得しません(つまり、Gendarme ルールに一致する FxCop ルールの SupressMessage も Gendarme ルールを抑制します) が、少なくとも Gendarme 名を使用して抑制することができます。