E 'possibile sopprimere un messaggio specifico del difetto del gendarme? Mi piacerebbe farlo nel codice sorgente con una bandiera o qualcosa di simile.Come sopprimere i difetti di Gendarme?
risposta
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.
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.
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.
- 1. software di rilevamento difetti/difetti
- 2. Quale regola desideri avere FxCop/Gendarme?
- 3. Come sopprimere i messaggi duplicati in log4j2
- 4. Difetti tra costruttori Scala malintesi
- 5. popupI difetti di bave con Material Design
- 6. Come sopprimere i messaggi di avviso dal cast()
- 7. Che cosa è il migliore rilevamento dei difetti? Difetti per KLOC?
- 8. Come posso testare la sicurezza del sito PHP per i più comuni difetti di sicurezza?
- 9. stringa Split sopprimere tutti i campi nulli
- 10. Come sopprimere l'output in RStudio?
- 11. Come sopprimere la registrazione dettagliata di Tensorflow?
- 12. C - Come sopprimere l'uscita di una sottofunzione?
- 13. Come sopprimere l'output per i test saltati in Jasmine
- 14. Come sopprimere i sottoreport vuoti in SSRS 2008
- 15. Come sopprimere il messaggio di errore OpenCV
- 16. Come sopprimere StyleCop Warning SA1649
- 17. Come sopprimere l'avviso di Pandas Future?
- 18. Come sopprimere l'output di stderr in PowerShell?
- 19. Come sopprimere l'avviso specifico di MSBuild
- 20. È possibile rilevare difetti di overflow integer con valgrind?
- 21. Software di registrazione dello schermo per acquisire i difetti del software
- 22. sopprimere script di shell messaggi di errore
- 23. Esportazione dei dati dei difetti QC HP in Excel
- 24. Come sopprimere l'output della procedura memorizzata mysql?
- 25. Come sopprimere il messaggio di errore di `ls`?
- 26. Come sopprimere una determinata avvertenza a Swift
- 27. Sopprimere -Wunknown-pragma di avviso in GCC
- 28. Come sopprimere l'output della console in Python?
- 29. Come sopprimere avvertimenti in GNU Octave
- 30. Come sopprimere PowerShell Get-Content uscita
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). –
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. –