Programmierer in meinem Team öffnen manchmal eine Transaktion und vergessen, die Anweisung scope.Complete() einzufügen (siehe Codeblock unten). Alle Ideen, Möglichkeiten, um entwederC# - Wie überprüfe ich nach fehlenden scope.Complete() Anweisungen?
(1) in unsere Lösung scope.Complete für fehlende() Aussagen oder
(2) haben Visual Studio automatisch markieren oder eine Warnung für fehlende scope.Complete() Aussagen erhöhen ?
Hier ist die Linie, die wir vermissen:
using(TransactionScope scope = new TransactionScope())
{
/* Perform transactional work here */
scope.Complete(); <-- we forget this line
/* Optionally, include a return statement */
}
Was ich
versucht habe, ich habe versucht, zu diesem Zweck ein ReSharper benutzerdefinierten Muster verwenden, ohne Glück. Idealerweise würde ich für etwas suchen, wie:
using(TransactionScope scope = new TransactionScope())
{
$statements1$
[^(scope.Complete();)]
$statements2$
}
akzeptiert jedoch nur ReSharper reguläre Ausdrücke für Bezeichner, nicht für Aussagen, so scheint dies nicht zu funktionieren (http://www.jetbrains.com/resharper/webhelp/Reference__Search_with_Pattern.html).
Irgendwelche Ideen? Ich bin offen für die Verwendung anderer Plugins oder Tools.
Danke,
Ben
Sie testen ihren Code nicht? – Magnus
Ich habe das vorher mit einem Test gesehen. Über die Reflektion können Sie feststellen, ob eine Methode für eine Instanz aufgerufen wird. Wenn es nicht ist, schlägt der Test fehl. –
Ich rechne mit NDepend, dass Sie eine Regel einrichten könnten, um nach Methoden zu suchen, bei denen die Anzahl der "TransactionScope" -Ctor-Verwendungen geringer ist als die Anzahl der 'Complete'-Verwendungen. – AakashM