¿Se puede configurar Resharper para advertir si no se maneja correctamente el identificador?


Hay una configuración en Resharper 4 (o incluso en el propio Visual Studio...) que obliga a una advertencia si olvido envolver código en un bloque using, o ommit la llamada de Eliminación adecuada en un bloque finally?

Author: serg10, 2008-09-19

5 answers

El análisis de eliminación automático correcto requiere DFA (Análisis de Flujo de Datos) de manera global. Es poco probable que cree un objeto identificable y no llame a ningún método en él y no lo pase como argumento. Si el objeto desechable se pasa a otros métodos (incluyendo llamar a sus miembros, cuando "esto" se pasa implícitamente), la herramienta debe analizar si no se llama a Dispose dentro, o si ese objeto no se almacena en algún lugar para su posterior eliminación.

Dicho esto, implementación ingenua de comprobar si el objeto desechable está de hecho dispuesto con la construcción" using " o de cualquier otra manera produciría demasiados falsos positivos, y haría inútil el análisis.

 27
Author: Ilya Ryzhenkov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-19 13:27:00

Descontento con los métodos actuales, he creado el mío propio: EyeDisposable . Es un instrumento IL por lo que debería atrapar muchas fugas no atrapadas por el análisis estático. Todavía está en su etapa inicial, los inpuits son bienvenidos.

 5
Author: kizzx2,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-22 12:40:50

Podría diseñar un pequeño complemento a R# que podría haber ejecutado dentro del editor de código que escanee el código y actualice el análisis de código para reflejar que es un objeto al que le falta la estructura que acaba de describir.

Echaría un vistazo a la arquitectura del plugin R# si decides ir por esa ruta.

 2
Author: user15749,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-19 14:44:24

Ver esta entrada de blog para algunos trucos para probar Dispose() en DEBUG. Básicamente, escribe un destructor de solo DEPURACIÓN que afirme que estás dispuesto.

 2
Author: Jay Bazuzi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-19 15:03:10

Es posible que desee mirar FxCop para esto: http://msdn.microsoft.com/en-us/library/ms182328 (VS.80).aspx

Es una pena que R# no lo maneje, incluso si solo es una advertencia para los campos de su clase y/o variables que crea.

 2
Author: user154380,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-22 10:37:52