Resharper peut-il être configuré pour avertir si IDisposable n'est pas géré correctement?

StackOverflow https://stackoverflow.com/questions/101664

Question

Existe-t-il un paramètre dans Resharper 4 (ou même dans Visual Studio lui-même ...) qui force un avertissement si j'oublie d'encapsuler le code dans un bloc en utilisant , ou d'omettre le bon appel Dispose dans un enfin bloquer?

Était-ce utile?

La solution

L’analyse automatique de suppression correcte nécessite DFA (Data Flow Analysis) de manière globale. Il est peu probable que vous créiez un objet IDisposable, n’appeliez aucune méthode dessus et ne le communiquiez pas comme argument. Si un objet jetable est transmis à d'autres méthodes (y compris l'appel de ses membres, lorsque "ceci" est implicitement transmis), l'outil doit analyser si Dispose n'est pas appelé à l'intérieur ou si cet objet n'est pas stocké quelque part pour une élimination ultérieure.

Cela dit, implémentation naïve de la vérification si un objet jetable est en fait éliminé avec "en utilisant". ou de toute autre manière produirait trop de faux positifs et rendrait l'analyse inutile.

Autres conseils

Mécontentement avec les méthodes actuelles, j'ai créé le mien: EyeDisposable . C'est un instrumentateur IL donc il devrait attraper de nombreuses fuites non détectées par l'analyse statique. Il est encore à ses débuts, les inpuits sont les bienvenus.

Vous pouvez concevoir un petit complément à R # que vous auriez pu exécuter dans l’éditeur de code qui analyse le code et le met à jour pour indiquer qu’il s’agit d’un objet qui manque de la structure que vous venez de décrire.

Si vous décidiez de suivre cette voie, je me pencherais sur l'architecture du plug-in R #.

Voir ce billet de blog pour quelques astuces pour tester Dispose () dans DEBUG . Fondamentalement, écrivez un destructeur réservé à DEBUG qui affirme que vous avez été supprimé.

Vous voudrez peut-être consulter FXCop pour ceci: http://msdn.microsoft.com/en-us/library/ms182328(VS.80).aspx

C'est dommage que R # ne s'en occupe pas, même s'il ne s'agit que d'un avertissement pour les champs de votre classe et / ou les variables que vous créez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top