I programmatori della mia squadra talvolta aprono una transazione e dimenticano di includere l'istruzione scope.Complete() (vedere il blocco di codice di seguito). Tutte le idee sui modi per entrambi iC# - Come faccio a verificare la mancanza di istruzioni scope.Complete()?
(1) cercare la nostra soluzione per la mancanza scope.Complete() dichiarazioni, o
(2) dispone di Visual Studio evidenziare automaticamente o sollevare un avviso per mancante scope.Complete() dichiarazioni ?
Ecco la linea ci manca:
using(TransactionScope scope = new TransactionScope())
{
/* Perform transactional work here */
scope.Complete(); <-- we forget this line
/* Optionally, include a return statement */
}
Quello che ho cercato
Ho provato con un modello personalizzato ReSharper per questo scopo, senza fortuna. Idealmente vorrei cercare qualcosa di simile:
using(TransactionScope scope = new TransactionScope())
{
$statements1$
[^(scope.Complete();)]
$statements2$
}
Tuttavia, ReSharper accetta solo le espressioni regolari per gli identificatori, non per le dichiarazioni, quindi questo non sembra funzionare (http://www.jetbrains.com/resharper/webhelp/Reference__Search_with_Pattern.html).
Qualche idea? Sono aperto ad usare anche altri plugin o strumenti.
Grazie,
Ben
Non testano il loro codice? – Magnus
Ho visto questo fatto prima con un test. Tramite riflessione è possibile determinare se un metodo viene chiamato su un'istanza. Se non lo è, il test fallisce. –
Penso che con NDepend è possibile impostare una regola per cercare metodi in cui il numero di utilizzi di 'TransactionScope' è inferiore al numero di utilizzi' Completi'. – AakashM