risposta

1

Se si utilizza il runner della console, è possibile utilizzare un file di difetto (non-source) per eliminare qualsiasi difetto su un metodo, tipo o assembly.

Il nuovo Gendarme 2.8 ha il supporto di base (leggi incomplete e buggy) per l'attributo [SuppressMessage] (come fxcop). Aspettatevi che questa funzionalità funzioni correttamente una volta rilasciato 2.10.

0

Per quanto posso vedere, non c'è modo di abilitare [SuppressMessage] in Gendarme (a 2.8). Ho afferrato l'ultima fonte di GitHub, perché non funzionava come descritto.

Il SupressMessageEngine è presente nel codice e ci sono test che lo eseguono tramite un override manuale di Runner.Engines.Subscribe. Ma [EngineDependency (typeof (SuppressMessageEngine))] non è applicato a tutte le regole compilate, che è il modo in cui viene sottoscritto quando Gendarme viene effettivamente eseguito.

Ho anche guardato la fonte per trovare un modo per iscriversi sempre a un motore particolare tramite la configurazione - ma non ce n'è.

Potrei sbagliarmi, ma sembra una svista che hanno dimenticato di tornare indietro e applicare gli attributi EngineDependency appropriati.

L'unica "soluzione" che posso pensare è scrivere una regola personalizzata che, quando viene chiamata, aggiunge un abbonamento a SuppressMessageEngine e non fa altro. Hacky sì, ma questo dovrebbe essere basato su quello che ho visto nel loro codice.

FYI - Appena implementato. È necessario creare il proprio regola personalizzata, l'importazione e Mono.Cecil Gendarme.Framework e framework .NET obiettivo 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 {} 
} 

Purtroppo, questo non tirerà nella attributi FxCopCompatibility che sono lì (cioè un SupressMessage poiché una regola FxCop che corrisponde a una regola Gendarme sopprimerà anche la regola Gendarme), ma almeno ti permetterà di usare i nomi di Gendarme per sopprimere.

5

Come già notato, la versione 2.10 supporta l'attributo [SuppressMessage].

Ad esempio, per sopprimere la regola AvoidNonAlphanumericIdentifierRule, fare questo:

[SuppressMessage("Gendarme.Rules.Naming", "AvoidNonAlphanumericIdentifierRule")] 
protected void Application_Start() 
{ 
    ... 
} 

Si noti che è necessario specificare il nome del gruppo in cui la regola vive ... in questo caso, AvoidNonAlphanumericIdentifierRule vive a Gendarme. Rules.Naming.dll. L'elenco completo delle regole e i loro nomi di assembly sono here.

+5

Si noti che il gruppo deve essere compilato con il simbolo 'CODE_ANALYSIS' definito [affinché funzioni correttamente] (http://www.mono-project.com/Gendarme.FAQ#Why_are_defects_decorated_using_.5BSuppressMessage.5D_attributes_still_showing_in_my_reports_.3F). –

+0

Inoltre, le ultime versioni aggiungono compatibilità FxCop, quindi se hai già un SuppressMessage da FxCop e ha una regola equivalente in Gendarme, il messaggio verrà eliminato. –

Problemi correlati