Resharper può essere impostato per avvisare se IDisposable non è gestito correttamente?
-
01-07-2019 - |
Domanda
Esiste un'impostazione in Resharper 4 (o anche Visual Studio stesso ...) che forza un avvertimento se dimentico di racchiudere il codice in un blocco utilizzando
o ommettere la chiamata Dispose corretta in un finalmente
bloccare?
Soluzione
La corretta analisi automatica dello smaltimento richiede DFA (Data Flow Analysis) in modo globale. È improbabile che si crei un oggetto IDisposable e non si chiami alcun metodo su di esso e non lo si passi come argomento. Se l'oggetto usa e getta viene passato ad altri metodi (inclusa la chiamata ai suoi membri, quando "questo" viene passato in modo implicito), lo strumento dovrebbe analizzare se Dispose non viene chiamato all'interno o quell'oggetto non viene archiviato da qualche parte per uno smaltimento successivo.
Detto questo, l'implementazione ingenua del controllo se l'oggetto usa e getta è effettivamente smaltito con " usando " costruire o in altro modo produrrebbe troppi falsi positivi e renderebbe inutile l'analisi.
Altri suggerimenti
Malcontento con i metodi attuali, ho creato il mio: EyeDisposable . È uno strumento IL, quindi dovrebbe rilevare molte perdite non rilevate dall'analisi statica. È ancora agli inizi, gli introiti sono ben accetti.
Potresti progettare un piccolo componente aggiuntivo per R # che potresti aver eseguito all'interno dell'editor di codice che scansiona il codice e aggiorna l'analisi del codice per riflettere che sei un oggetto a cui manca la struttura che hai appena descritto.
Esaminerei l'architettura del plug-in R # se decidessi di seguire quella strada.
Vedi questo post sul blog per alcuni trucchi per il test di Dispose ()
in DEBUG
. Fondamentalmente, scrivi un distruttore solo DEBUG che afferma di essere stato eliminato.
Potresti dare un'occhiata a FXCop per questo: http://msdn.microsoft.com/en-us/library/ms182328(VS.80).aspx
È un peccato che R # non lo gestisca, anche se solo un avvertimento per i campi nella tua classe e / o variabili che crei.