Los programadores de mi equipo a veces abren una transacción y olvidan incluir la instrucción scope.Complete() (ver el bloque de código a continuación). Cualquier ideas sobre aspectos a la deC# - ¿Cómo verifico si faltan las instrucciones scope.Complete()?
(1) buscar nuestra solución para la falta scope.Complete() declaraciones o
(2) tener Visual Studio automáticamente resaltar o elevar una advertencia de falta scope.Complete (declaraciones) ?
Aquí está la línea que se pierda:
using(TransactionScope scope = new TransactionScope())
{
/* Perform transactional work here */
scope.Complete(); <-- we forget this line
/* Optionally, include a return statement */
}
Lo que he tratado
He intentado usar un patrón ReSharper personalizada para este propósito, sin suerte. Lo ideal sería buscar algo como:
using(TransactionScope scope = new TransactionScope())
{
$statements1$
[^(scope.Complete();)]
$statements2$
}
Sin embargo, ReSharper sólo acepta expresiones regulares de los identificadores, no para los estados, por lo que este no parece trabajar (http://www.jetbrains.com/resharper/webhelp/Reference__Search_with_Pattern.html).
¿Alguna idea? Estoy abierto a usar otros complementos o herramientas también.
Gracias,
Ben
¿No prueban su código? – Magnus
He visto esto hecho antes con una prueba. A través de la reflexión puede determinar si se llama a un método en una instancia. Si no es así, la prueba falla. –
Creo que con NDepend podría configurar una regla para buscar métodos en los que el número de usos del ctor de 'TransactionScope' fuera menor que el número de usos' completos'. – AakashM